使用gdb调试exe
Posted
技术标签:
【中文标题】使用gdb调试exe【英文标题】:debugging exe using gdb 【发布时间】:2016-05-20 06:23:59 【问题描述】:在尝试了几种替代方法来调试 exe 相当不成功后,决定尝试 gdb 在 windows env 上调试可执行文件。
用于编译 exe 的选项如下所示
/nologo /Z7 /Zi /MT /W3 /GX /O2 /D /DEBUG
这些是我用来将可执行文件加载到 gdb 中的选项
target exec setup
run -debug ( this is the option against which I would like to perform some debugging)
我需要一种将源/符号加载到 GDB 中的方法,因为否则我无法设置任何有效的断点。
这是我尝试过的,为了设置断点(不同于通常的方式)
(gdb) set breakpoint pending on
(gdb) break runInstaller.c:6318
No symbol table is loaded. Use the "file" command.
Breakpoint 2 (runInstaller.c:6318) pending.
(gdb) pwd
Working directory C:\
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y <PENDING> WinMain
2 breakpoint keep y <PENDING> runInstaller.c:6318
我已经试过这个来加载可执行文件;
(gdb) file setup
Reading symbols from setup...(no debugging symbols found)...done.
由于上述错误,我意识到可执行文件没有使用调试选项编译,所以它在 gdb 中有一个 gcc -g 等效项,或者有更好的方法将符号/源代码加载到 gdb 中。
编辑 1: 每当我尝试添加断点时,都会看到以下错误:
(gdb) b main_helper
Function "main_helper" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 5 (main_helper) pending.
【问题讨论】:
你提到的那些选项是用于 cl,而不是 gcc?如果是这样,为什么不使用 windbg 或 Visual Studio 中的调试器?他们可能在调试 Windows 二进制文件方面做得更好 @stijn 是的,我提到的选项适用于 CL 而不是 gcc,我曾尝试使用 windbg(意识到命令窗口正在显示我不理解的汇编级指令,因为未加载私有符号我无法在那里设置断点枯萎)gdb的舒适度略高。不幸的是,我们也有一个应该支持的 exe 文件 既然你有 cl,你可能也有 VS(除非你使用了那些全新的“只是 C++ 工具集”的东西之一)?我相当确定它的调试器的舒适度与 gdb 相似,只是它全部在 gui 中而不是在命令行中。 相关:The g++'s -g option equivalent to VS2010 cl compiler。它说cl
和-Zi
和link
和-debug
是需要的。与 setup.exe 文件在同一目录下是否有 pdb 文件?
@MarkPlotnick 是的,我已将 pdb 文件添加到与可执行文件相同的目录中;即便如此,与上面报告的状态相比,我还是看到了任何差异
【参考方案1】:
您当前使用的安装文件没有调试所需的符号表。当您生成可执行二进制文件时,您还需要生成符号表。 前任。当我们为 c 程序生成可执行文件时,我们使用参数 -g 进行编译。
gcc setup.c -o setup -g
-g
告诉 gcc 编译器生成符号表。
【讨论】:
是的,我知道这一点,但由于我使用的是 windows 编译器,我不确定 windows 中 gcc -g 的等效选项。 你使用的是哪个编译器? 我使用的是intel编译器以上是关于使用gdb调试exe的主要内容,如果未能解决你的问题,请参考以下文章