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

时间:2012-12-21 04:38:48

标签: c++ visual-studio-2010 visual-studio debugging mfc

我需要调试链接库的发布版本。我已经在article之后使用我的发布版本生成调试信息但是我如何对库项目执行相同的操作?请注意,库项目在属性中没有链接页面,其中在上面的链接中创建了调试信息。我正在使用VS2010。

我真正想要的是让TRACE在调试库时工作。我试图将调试版本的库与发布exe链接起来,但它会产生链接器错误。

2 个答案:

答案 0 :(得分:2)

  

我真正想要的是让TRACE工作......

你的意思是MFC TRACE宏?将消息写入调试器的调试/输出窗口的那个?

不幸的是,即使您确实修复了构建设置,以便最终的可执行文件包含静态库的调试信息,它也不会带回那些跟踪语句。 TRACE是一个宏,因此由编译器预处理器处理。在发布模式下编译时,该宏被重新定义为无操作。就像从源代码中删除了TRACE语句一样。

即使您确实解决了向库和可执行文件添加调试符号的问题,也不会将这些跟踪语句带回来。它们在编译阶段被删除了。

那该怎么办?事实证明,如果你深入挖掘这些宏,他们最终会调用Win32函数OutputDebugString。此调用在ms库的调试版和发行版中都可用。所以...你可以用对OutputDebugString的显式调用来替换跟踪宏 - 编写代码并不方便,但至少你会在发布模式下获得调试输出。

顺便说一下,几年前我终于放弃了所有这些宏,我们已经完全用log4cplus次调用取而代之。任何日志记录框架都会比跟踪宏更好 - 因为您真正需要跟踪的时间不是在您调试时,而是在您的代码处于生产状态而您无法在本地重现问题时。记录客户可以发送给您的文件要好得多,然后依靠只能在调试器中工作的跟踪。无论如何要考虑的事情......

答案 1 :(得分:1)

静态库未链接,因此链接器选项不可用也就不足为奇了。您基本上只需要告诉编译器生成调试信息。从那里开始,创建库只不过是将一堆目标文件放在一个文件中。

基本上,只需告诉编译器生成调试信息,该库将包含调试信息。