Windbg分32位和64位版本,32位程序应使用32位Windbg调试,64位程序应64位Windbg调试。
若想使用64位的Windbg分析32位的程序, 使用如下命令进行CPU模式的切换:
.load wow64exts;!sw
//例如:
1.查看线程停在哪里
~*kb;.load wow64exts;!sw;
方法1:File->Open Executable(打开一个.exe可执行文件)->在Windbg窗口执行g(Go);出现如下错误:
ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll -
ntdll!LdrInitShimEngineDynamic+0x35c:
以Viusal Studio为例,一般发布给客户的程序,我们采用Release
模式编译程序,而Release
模式与Debug
模式,有个很大的区别: Release模式编译出来的程序默认是不带PDB相关信息的,而Debug模式则有.
没有设置符号信息的路径,所以找不到符号。这里所说的符号信息就指上述PDB文件,并且在默认Release模式编译出来的程序,会带有一个同名的PDB文件。你也可以通过配置Visual Studio的配置项来决定是否产生PDB文件:
项目属性->链接->Debugging->生成debug信息(Generate Debug Info)
方法2:先运行一个.exe->File->attach to a process
Processes and thread //找到对应线程号,双击后在local中看内存变量。
~9kv //查看9号线程的内存
linux下QT源文件的编译:
1.进入main.cpp所在的目录,敲入qmake -project 回车,生成***.pro工程文件
2.再敲入qmake ***.pro 回车,生成相关的MakeFile文件(***与目录名有关)
调试器命令窗口是windbg中的主要调试信息窗口。可以在此窗口中输入调试程序命令并查看命令输出。Windbg的命令窗口是我们进行调试时,主要打交道的窗口。界面如下:(一般把.exe打开后就会自动出现)
“监视”窗口显示和更改全局变量、局部变量和寄存器信息。
在点击go之前:若要将变量添加到监视窗口中,选择第一个空单元格名称列中,键入变量名称,然后按 ENTER。 一个带有感叹号变量从单独的模块名称 (!)。 如果未指定模块,则使用当前的模块。
名称列显示每个本地变量的名称,值列显示每个变量的当前值。
寄存器窗口包含两个列。 Reg列列出了所有目标处理器的寄存器。 Value列显示每个注册的当前值。
内存窗口显示多个列中的数据。 在窗口的左侧列显示每个行的开始地址。 其余列显示所需的信息,从左到右。 如果选择字节中显示格式菜单中,对应于这两个字节的 ASCII 字符将显示在窗口的右侧。
作为一种替代方法 k命令时,您可以调用窗口中查看调用堆栈。通过上面的方式打开call stack窗口。
反汇编是指将非汇编目标代码转变成汇编的过程。平常看到的反汇编代码,其实是由C编译器将C语言代码直接编译成汇编代码的,并非由机器码反汇编成汇编。
反汇编和C代码中都可以设置断点,但调试反汇编可以获得更高的精度,因为一句C代码可能有数十条汇编代码组成,在C代码单步执行一次,可能执行了十几条汇编代码,而在反汇编界面单步调试,每次只执行一句汇编代码。
若要在草稿板窗口中键入,单击窗口,然后开始键入的你想要添加的文本。 此外可以使用标准复制和粘贴功能。 草稿板窗口的内容不会影响调试器的操作。 此窗口存在只是为了帮助进行文本编辑。
“进程和线程”窗口显示当前正在调试的所有进程的列表。进程中的线程出现在每个进程下。如果调试器附加到多个系统,则系统显示在树的顶层,进程从属于它们,线程从属于进程。
命令浏览器窗口显示并存储调试器命令的文本结果。此窗口创建命令引用,使您可以查看特定命令的结果,而无需重新输入该命令。命令浏览器窗口还提供了对存储的命令的导航,因此您可以比使用调试器命令窗口更快地访问命令。