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