zoukankan      html  css  js  c++  java
  • chromium浏览器开发系列第五篇:Debugging with WinDBG

         Windbg相信windows开发的人都知道,有些人用的溜儿溜儿的,有个crash,直接拿这个工具一分析,就定位出来了。非常好用。以前有个同事,做sdk开发的,会各种命令。来北京后,还去过微软面试(不过当时是做外包,挣得也不少),问的问题就包括会不会用windbg定位问题。当时就会几个简单的命令,最后还是没面上(不堪回首)。

         使用windbg调试windows下的程序,只要有符号文件,问题定位分分钟的事。下面主要讲一下使用windbg调试chromium。有些是从官网上对翻过来的,如果大家看不明白,可以直接加我们的公众号:程序员互动联盟(coder_online)来进行互动。

         Windbg是一个强大的免费工具,它比起VisualStudio的调试器还要强大,能够看到当前的内存栈等信息,但是也比那个难用(和Linux下的gdb差不多)。大家可以去微软官网下载最新版本安装,官网有两个版本:32位和64位。我们使用32位来调试chromium。

    初始化

    1.设置符号路径

         打开windbg,文件菜单->符号文件路径(快捷键ctrl+s)

         这里假设c:codesymbols这个是你符号文件存储的位置(这个可以自己随意设置,但是必须保证有足够的空间,找个空盘符有个10G左右的,新建一个文件夹,以后就别管了),设置符号路径如下:

    SRV*c:codesymbols*http://msdl.microsoft.com/download/symbols;SRV*c:codesymbols*https://chromium-browser-symsrv.commondatastorage.googleapis.com

    2.在视图窗口中可以选择显示一些窗口

     

    3.使用文件下的一些功能去加载想要调试的进程或者可执行文件

    4.设置源码路径

         如果想直接定位到源码位置,可以设置源码路径:文件->源码路径,最好是本地代码,直接指定chromium网络地址不太现实:

         使用windbg调试chromium比较重要的一点是,它可以调试子进程。一个比较简单的方法就是在使用“Open Executable”打开窗口时,选中下面的选项,如图所示:

    也可以通过attach来调试运行的进程,使用detach来解除调试进程。

     

    #重要说明

    (1) windbg命令分为标准命令,元命令和扩展命令。

       标准命令提供最基本的调试功能,不区分大小写。如:bp g  dt  dv  k等

       元命令提供标准命令没有提供的功能,也内建在调试引擎中,以.开头。如.sympath  .reload等

       扩展命令用于扩展某一方面的调试功能,实现在动态加载的扩展模块中,以!开头。如!analyze等

    (2) 进入调试状态时,直接回车可重复执行上一条命令;按上下方向键可以浏览和选择以前输入过的命令

    (3) 神奇的Tab键,进行命令补全;ESC清除当前命令输入框中的文本

    (4) 使用;作为分隔符,可以在同一行输入多条命令

    (5) 下图红色框中的“0:047”。【0为当前调试会话的进程号;047为调试会话的线程号】

    (6) 当命令提示符显示*BUSY*时,即使命令输入框可以输入命令,但输入的命令不会立即被执行,要等windbg空闲时才能执行。

       可使用Ctrl + Break来终止一个长时间未完成的命令。

       如果大家想更深入了解windbg的知识,可以去官方网站学习。另外推荐一本学习的书籍《软件调试》。

     

    如果大家有什么想法或者疑问,请关注我们的公众号,及时沟通,这里有各种大牛帮你解决问题。

    欢迎关注微信公众平台:程序员互动联盟(coder_online),一个开发人员的家,来诉说自己的故事

    27225517_4bEO.jpg

  • 相关阅读:
    平衡二叉树之RB树
    平衡二叉树之AVL树
    实现哈希表
    LeetCode Median of Two Sorted Arrays
    LeetCode Minimum Window Substring
    LeetCode Interleaving String
    LeetCode Regular Expression Matching
    PAT 1087 All Roads Lead to Rome
    PAT 1086 Tree Traversals Again
    LeetCode Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/ghost045/p/4450058.html
Copyright © 2011-2022 走看看