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

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

我需要调试链接库的发布版本。我已经按照此 article 使用我的发布版本生成调试信息但是我怎样才能对图书馆项目做同样的事情呢?请注意,库项目在上面的链接中创建调试信息的属性中没有链接页面。我正在使用 VS2010。

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

最佳答案

What I really want is to make TRACE work...

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

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

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

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

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

关于c++ - 如何在 Visual Studio 中调试库的发布版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13984344/

相关文章:

c++ - 分支预测优化

c# - 安装完软件后如何安装USB驱动

c++ - 为什么在键检查 map::emplace 之前调用对象的构造函数

c++ - 在自动化测试后安全清理阻塞的 std::thread

c - 关于 C 使用 VC 和 gcc 或其他的不同规则?

visual-studio - 如何在 Visual Studio 2013 中创建 Web 部署包

windows - Windows 7 上的代码签名驱动程序失败并显示 0xC0000428

regex - 在 Visual Studio 2010 中使用正则表达式查找和替换小写

c# - 在 Repeater 中更改 LinkBut​​ton 的颜色

css - 限制 LESS Css 变量的范围