• windbg 简单使用



    ==========================
    下载 windbg
    ==========================
    搜索 windbg 官网, http://windbg.org/

    windbg 工具包含在  Windows Software Development Kit (SDK) 中, 所以要下 windows SDK.  我的操作系统系统 win7, 所以下的是 win7版本 SDK,  下载地址为 https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/
    下载下来的是一个installer, 在installer中选 Debugging Tools for Windows"

    ==========================
    下载 windows的 symbols 配置
    ==========================
    一般的 windows 的dll/exe程序文件都做过优化, 文件内部并不包含symbol信息(函数名/变量名), 所以分析dump文件, 一定需要先下载这些程序的 symbol 文件, symbol 文件一般的扩展名是 *.pdb.

    1. [有效方法] 下载 symbol 方法:

    微软已经不提供offline symbols 下载包, 只能使用 symchk.exe 下载.
    将symbols文件下载到本地命令格式为:
    "C:Program FilesDebugging Tools for Windows (x64)symchk.exe" [filename] /s SRV*[symbol_folder]*http://msdl.microsoft.com/download/symbols

    示例1: 将指定的calc.exe的pdb文件下载到本地 c:symbols
    "C:Program FilesDebugging Tools for Windows (x64)symchk.exe" "c:windowssystem32calc.exe" /s SRV*c:symbols*http://msdl.microsoft.com/download/symbols

    示例2: 扫描c:windows 下所有的exe/dll文件, 并把它们对应的pdb文件下载到本地 c:symbols
    "C:Program FilesDebugging Tools for Windows (x64)symchk.exe" /r c:windows /s SRV*c:symbols*http://msdl.microsoft.com/download/symbols
    其中 /r 代表循环, -r c:windows 即循环windows系统目录下的exe/dll文件, 所以上面的命令会花费很长时间才能完成下载.


    ==========================
    windbg 中使用已经下载的symbols
    ==========================
    查看当前的symbol search path, 只需要直接运行 .sympath 即可.
    .sympath

    要本地程序的 C:symbols 路径, 使用.sympath+ 命令,
    .sympath+ C:symbols
    .sympath+ cache*

    直接设置sym path 命令,
    .sympath C:symbols1;C:symbols2

    ==========================
    windbg 中直接使用微软服务器上的symbols
    ==========================

    使用下面命令:
    .sympath srv*c:symbols*https://msdl.microsoft.com/download/symbols

    前缀srv代表是 symbol server
    第一个*后是download server下载下来的local directory,
    第二个*后是微软 symbol server path, 包含 shell32.dll, gdi32.dll, advapi32.dll, kernel32.dll, ntdll.dll 等文件的symbols.

    ==========================
    准备自研工具的symbols
    ==========================

    推荐将 windows 官方的symbols单独放到一个目录, 比如 c:symbols

    将自研工具的pdb文件 放到另一个目录, 比如c:privateSymbols 

    .sympath+ C:privateSymbols

    ==========================
    加载 symbols 文件
    ==========================
    设置 symbol search path之后, 需要加载相关 modules 的 symbol 文件, windbg 命令为:
    .reload /f
    该命令也能报错当前缺少哪些 symbol 库. 如果使用了微软远端的symbols server, reload 命令需要很久时间, 见下面的截图.

    如果 .reload /f 命令报错, 可以使用下面命令进入 verbose 模式, 可以看出更详尽的信息:
    !sym noisy
    然后再运行 .reload /f 命令

     


    ==========================
    创建需要debug程序的 dump 文件
    ==========================

    可以用任务管理器将该程序的进程导出一个转储dump文件,  有时会报 "拒绝访问"的错误, 原因往往是资源管理和你程序64bit/32bit版本不一致, 但有时候也不太管用.

    推荐使用 windbg , 方法是: windbg 菜单 file/attach to a process, 选中目标程序, 然后运行下面命令:

    .dump /ma /u c:calc.dmp

    .dump命令参数比较多,常用的组合就是/ma,/m表示生成minidump,/a表示dmp包含所有信息,/u参数就是上面说的附加时间和PID信息到文件名。

    ================================
    windbg 实例学习
    ================================
    记一次使用windbg排查内存泄漏的过程
    https://www.cnblogs.com/lanxiaoke/p/12997032.html

    调试内存泄漏问题的一些经验

    http://fresky.github.io/2015/06/21/how-to-attack-the-memory-leak-issue/

    https://www.codeproject.com/articles/31382/memory-leak-detection-using-windbg

    https://stackoverflow.com/questions/674247/vb6-memory-leak

  • 相关阅读:
    react 学习
    redux saga学习
    Power BI连接至Amazon Redshift
    php时间日期
    layui select 禁止点击
    微信小程序二维码是无法识别二维码跳转到小程序
    JSON字符串与JSON对象的区别
    前端切图要选择png和jpg呢?
    @media媒体查询
    TortoiseGit revert failed
  • 原文地址:https://www.cnblogs.com/harrychinese/p/winbug.html
Copyright © 2020-2023  润新知