如何在Visual Studio中调试库的发布版本

5
我需要调试我的链接库的发布版本。我已经按照这篇 文章 生成了调试信息,但是如何对库项目执行相同操作呢?请注意,库项目中没有属性页面中创建调试信息的链接。我正在使用VS2010。
我真正想要的是在调试库时使TRACE工作。我尝试将调试版本的库与发布exe链接,但会产生链接器错误。

1
你是在谈论静态库还是动态链接库? - Jerry Coffin
@JerryCoffin 这是静态库,不是动态链接库。 - zar
你正在运行什么类型的应用程序? - makc
@makc,这是基于对话框的 MFC。 - zar
2个回答

2
我真正想要的是使TRACE工作起来...
你是指MFC TRACE宏吗?它会将消息写入调试器的调试/输出窗口中?
不幸的是,即使您修复了构建设置,使您的最终可执行文件包含静态库的调试信息,也无法恢复那些跟踪语句。 TRACE是一个宏,因此由编译器预处理器处理。在发布模式下编译时,该宏被重新定义为无操作。就好像TRACE语句从源代码中删除一样。
即使您解决了向库和可执行文件添加调试符号的问题,也无法恢复这些跟踪语句。它们在编译阶段被删除了。
那么该怎么办呢?事实证明,如果您深入挖掘这些宏,它们最终会调用Win32函数OutputDebugString。这个调用在ms库的调试和发布版本中都可用。所以...你可以用显式调用OutputDebugString替换跟踪宏-虽然不太方便编码,但至少你会在发布模式下得到调试输出。
顺便提一下,我几年前最终放弃了所有这些宏,并且我们已经完全用 log4cplus 调用替换了它们。任何记录框架都比跟踪宏更好 - 因为你真正需要跟踪的时候不是在调试时,而是当你的代码在生产中并且你无法在本地重现问题时。将日志记录到客户可以发送给您的文件中要好得多,而不是依赖只能在调试器中工作的跟踪。无论如何,值得考虑...

+1 我确实注意到 TRACE 没有起作用,你的回答帮了我很多。 - zar

1
一个静态库没有被链接,因此链接器选项不可用是很正常的。你只需要告诉编译器生成调试信息即可。从那里开始,创建库只是将一堆目标文件放在一起成为单个文件而已。
所以基本上,只需告诉编译器生成调试信息,库就会包含调试信息。

+1,谢谢你,你是正确的,我禁用了优化,现在我可以调试它了。即使在这之前我也能够调试/步入代码,但有时监视窗口会显示虚假值。 - zar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接