WinDbg单机调试

时间:2022-01-19 03:43:25

1、运行一个exe文件,发生中断

  Ctrl Alt Delete打开任务管理器-->详细信息-->选择对应的应用名称,右键选择创建转储文件,等待文件创建完成。

2、打开WinDbg工具

2.1 设置符号表的方式

  选择File>Symbol File Path,设置pdb文件的位置为待调试exe的pdb文件(即testWindbg.pdb)所在位置。内容为:pdb文件和exe文件所在的目录;SRV*e:mysymbol* http://msdl.microsoft.com/download/symbols

路径以‘;‘(分号)为分隔,mysymbol为本地缓存符号的目录

2.2 设置源代码路径

  选择File>Source File Path,设置源代码文件的位置为待调试exe的源码文件(即main.cpp)所在位置,即是源代码所在的目录。

2.3 打开带调试的可执行文件

  选择File>Open Executable,打开待调试exe,若需要外部参数可以填在Arguments中。

2.4 问题

1)填入符号表后界面出现 *** ERROR:Symbol file could not be found.Default to export symbols for ntdll.dll

不需要理会,会在后续自动进行加载,使用lm查看加载的模块,会发现已经加载。
  *** ERROR: Symbol file could not be found. Defaulted to export symbols for C:WindowsSysWOW64RPCRT4.dll -
  ModLoad: 00000000`776a0000 00000000`77760000 C:WindowsSysWOW64RPCRT4.dll

3、调试——定位程序崩溃的原因

1)输入.reload命令重新加载符号
2)输入指令g执行线程(会在程序结束、遇到断点或者其他造成调试器停止的事件发生时停止)
  (4ba4.3f94): WOW64 breakpoint - code 4000001f (first chance)
  First chance exceptions are reported before any exception handling.
  This exception may be expected and handled.
说明: 暗示本程序运行时会有问题。
3)继续执行g
  直到按下某个键时,出现定位到某行代码位置(该行代码引起程序崩溃),WinDbg界面会提示崩溃的原因。

4、断点调试

1)输入.reload命令重新加载符号
2)使用bp命令设置断点
  bp 函数名
  bp ‘main.cpp:3‘,在main函数第三行代码处设置断点
  bp main 5c,在main函数偏移5c位置设置断点
  x 可执行文件名!*char*查找相关函数名后,用bp指令在某个函数设置断点(bp 地址/bp 函数名)

  bl 列出当前存在的断点和他们的状态
  bc 移除一个或多个断点
  bd 暂时禁用一个或多个断点
  be 重新启用一个或多个断点
  ba 设置数据断点。这种断点在指定内存被访问时触发
  br 修改一个已存在的断点的ID

3)g
  Breakpoint 0 hit
  ......
  ......
说明运行到断点位置

4)单步调试p或F10
5)单步跳入t或F11
6)单步跳出gu或Shift F11
7)查看变量
  dv:局部变量
  dv /i:局部变量, 并显示符号的类型和参数类型
  dv /V:局部变量, 并显示变量的存储位置.
  dt:命令显示局部变量、全局变量或数据类型的信息。它也可以仅显示数据类型。即结构和联合(union)的信息
  dv tt
  dt tt

  db:查看某个内存的字节值和ASCII字符
  dc:命令查看查看某个内存的双字值和ASCII字符
  du:命令查看Unicode字符