Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在VisualStudio中调试库的发布版本_C++_Visual Studio 2010_Visual Studio_Debugging_Mfc - Fatal编程技术网

C++ 如何在VisualStudio中调试库的发布版本

C++ 如何在VisualStudio中调试库的发布版本,c++,visual-studio-2010,visual-studio,debugging,mfc,C++,Visual Studio 2010,Visual Studio,Debugging,Mfc,我需要调试链接库的发布版本。我已经在使用发布版本生成调试信息了,但是如何使用库项目生成调试信息呢?请注意,在上面的链接中创建调试信息的属性中,库项目没有链接页。我正在使用VS2010 我真正想要的是在调试库时使跟踪工作正常。我试图将库的调试版本与版本exe链接,但它会创建链接器错误。静态库未链接,因此链接器选项不可用也就不足为奇了。您基本上只需要告诉编译器生成调试信息。从这里开始,创建库只不过是将一组对象文件放在一个文件中 所以基本上,只要告诉编译器生成调试信息,库就会包含调试信息 我真正想要的

我需要调试链接库的发布版本。我已经在使用发布版本生成调试信息了,但是如何使用库项目生成调试信息呢?请注意,在上面的链接中创建调试信息的属性中,库项目没有链接页。我正在使用VS2010


我真正想要的是在调试库时使跟踪工作正常。我试图将库的调试版本与版本exe链接,但它会创建链接器错误。

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

所以基本上,只要告诉编译器生成调试信息,库就会包含调试信息

我真正想要的是让跟踪工作

你是说MFC跟踪宏?将消息写入调试器的调试/输出窗口的那个

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

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

那怎么办呢?事实证明,如果你深入研究这些宏,它们最终会调用Win32函数。此调用在ms库的调试版本和发布版本中都可用。所以您可以将跟踪宏替换为对OutputDebugString的显式调用—使用它编写代码并不方便,但至少可以在发布模式下获得调试输出


顺便说一句,几年前我终于放弃了所有这些宏,我们用调用完全取代了它们。任何日志框架都比跟踪宏好,因为真正需要跟踪的时间不是调试时,而是代码处于生产环境中且无法在本地重现问题时。最好登录到客户可以发送给您的文件,然后依靠仅在调试器中工作的跟踪。不管怎么说……< /P>你是在讨论静态库还是DLL?@ JerryCoffin,它是静态库,没有DLL。你正在运行什么类型的应用程序?@ MAKC,它是基于对话框的MFC + 1。谢谢你是对的,我禁用了优化,我可以调试它。即使在这之前,我也能够调试/单步执行代码,但watch window在+1的时间内显示了虚假值。我确实注意到跟踪不起作用,您的回答很有帮助。