使用 GDB 在 Windows 下调试 DLL

Posted

技术标签:

【中文标题】使用 GDB 在 Windows 下调试 DLL【英文标题】:Debug DLL's under Windows with GDB 【发布时间】:2009-08-20 11:20:33 【问题描述】:

我有一些项目由几个 DLL 组成,这些 DLL 已使用 MinGW 编译并带有调试信息,另一个项目具有使用这些 DLL(也使用 MinGW 编译)的 EXE 目标。

问题是,我需要在这些 DLL 中的函数上放置断点,但 GDB 虽然设置了它们,但在运行时会默默地忽略它们。进入它们(使用's'键)只是跳过它们(就像使用'n'键)。我怎样才能进入这些 DLL?也许我应该为 GDB 指定一些选项?提前致谢。

【问题讨论】:

如果添加 C 或 C++ 标签,可能会获得更多浏览量。 您是在开始运行程序之前还是之后在 DLL 代码中添加断点? 两种方法我都试过了——结果是一样的 Andy:向我们展示你用来编译的命令行。最简单的答案是如果您缺少所需的选项。 “DLL 项目”实际上是 VLC 媒体播放器的构建。这是编译(.c => *.o):paste.org/pastebin/view/9900。这是链接(.o => *.dll,虽然我不确定第一行是否重要):paste.org/pastebin/view/9901。正如我所看到的,有-O2,尽管我以调试风格编译它并且-g 在那里。我将尝试使用 -O0 重新编译它,正如用户 fnieto 在下面推荐的那样。希望这会有所帮助。 【参考方案1】:

确保您在编译时将 gcc optimization level 标志设置为 0 ( -O0 )。

【讨论】:

嗯,这似乎达到了预期的效果。虽然它在 VLC 中显示了一些新的意外崩溃:( 这与问题无关。至少,现在你可以调试它们了。

以上是关于使用 GDB 在 Windows 下调试 DLL的主要内容,如果未能解决你的问题,请参考以下文章

Windows下CDT GDB调试

windows下使用mingw/gdb无法调试eclipse helios cdt上的小程序,控制台死机

linux下使用gdb调试崩溃和死锁实例

linux下gdb调试

gdb 调试程序 回顾

一文掌握vscode远程gdb调试