我粗略地知道,当从 .exe 静态链接到 .lib 时,代码被放置在 .exe 中(当然缺少一些细节)。
但是,当从像WinDbg这样的东西获取堆栈跟踪时,我是否需要为exe和lib都提供一个pdb,或者exe的pdb是否包含lib的pdb中的信息(与exe的方式相同)包含库)?
我问这个问题是因为在使用 MSVC(使用 CMake)进行调试构建时,我获得了 .lib、.ddls、.exe 的 pdb,但在发布版本中我只能获得 .dll 和 .exe 的 pdb
我的公司构建启用了调试信息的版本,
但是嵌入调试信息(使用
/Z7
)对我们来说不是一个选择,因此,我们手动测试,例如:
*.pdb
文件。*.pdb
。*.pdb
文件。*.pdb
文件的大小。该应用程序的
*.pdb
文件变得巨大,*.pdb
文件已嵌入。
要么是这样,要么 MSVC 有巨大的错误;-)
我们可以更进一步,在静态库中添加一个有意的崩溃,看看
*.dmp
文件的堆栈跟踪是否真的可以转换为文件路径和行号,但上面对我们来说已经足够了。
检查这个答案。有编译选项。
如果使用 /ZI 或 /Zi(C/C++ -> 常规 -> 调试信息格式),则会创建 vc$(PlatformToolsetVersion).pdb,其中包含创建的所有 .obj 文件的调试信息。如果交替使用 /Z7,调试信息将嵌入到 .obj 文件中,然后嵌入到 .lib 中。这可能是分发静态库调试信息的最简单方法。