使用 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的主要内容,如果未能解决你的问题,请参考以下文章