【问题标题】:How to get debug symbols into DLLs, or extract them to a dbg file, with Mingw?如何使用 Mingw 将调试符号放入 DLL,或将它们提取到 dbg 文件中?
【发布时间】:2011-01-15 18:25:43
【问题描述】:

我编写了一个共享库,部分由用 Visual Studio 6(纯 C)编写的 Windows 应用程序使用。

该库在 Linux 下完美运行,但在 Windows 下某些地方出现问题(它使用了一些可能包含错误内容的 #ifdef WIN32)。

但是在 VS6 中将库 DLL 作为“附加 DLL”添加到项目中并在调试模式下运行应用程序,它表示 DLL 文件不包含调试信息。

该库是基于 gcc 构建的,没有优化 (-O0) 和调试符号 (-g)。

i586-mingw32msvc-nm -a file.dll 确实显示符号,当剥离 DLL 时,它的大小减半,i586-mingw32msvc-nm -a file.dll 将不再显示任何内容。

但 Visual Studio 6 仍然抱怨缺少调试信息。并使用“Dependeny Walker”工具在库中显示“Debug = No”。

为了能够解决在Windows下运行时出现的问题,调试信息至关重要。但是如何将它们包含在 DLL 中(以 VS6 兼容的方式)或者将它们提取到 dbg/pdb 文件中?

【问题讨论】:

标签: c debugging dll gcc mingw


【解决方案1】:

问题在于 GCC 并不真正了解 PDB。理想情况下,如果可以的话,我会尝试使用 VC6 构建 DLL(好吧,理想情况下我不会,我会在 Windows 上使用更好的编译器,因为 VC6 已经过时了)。另一种选择可能是使用 MingW 构建整个应用程序,然后使用带有适当前端的 gdb。

但是,this email might help - 我自己没有尝试过,看来您只能获得非常有限的调试信息。

【讨论】:

    【解决方案2】:

    GCC 和 VC++ 不使用相同的调试信息格式,因此您已经拥有了它。然而,使用调试器从来都不是必需的——不要过分依赖调试器是个好主意。

    【讨论】:

    • > 使用调试器从来都不是必需的,但是你在开玩笑吧?!调试器对于开发来说是至关重要的!难怪连微处理器都有调试功能。
    • @Master:不正确。如果您使用的是测试驱动开发方法和调试语句,您可能永远不需要使用调试器。
    【解决方案3】:

    您始终可以使用 gdb 作为调试器,而不是使用 windbg。它会理解来自 gcc/g++/mingw 工具链的符号。可能不会完全集成到您的工具包中,但它会为您提供符号。 mingw 二进制安装程序中提供了 Windows 版本的 gdb。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      • 2021-05-25
      相关资源
      最近更新 更多