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