我正在尝试了解如何启用(和使用)Borland 的 WARN 和 TRACE 宏。
但是,这似乎是针对 BCB5 而不是 2006 Borland Developer Studio。
- 我已经设置了两个定义(__WARN 和 __TRACE)
- 我已经包含了 .h 文件 ()
- 我添加了一些宏,一切都可以正常编译和链接。
但是当我运行应用程序时(在 DEBUG 模式下),没有创建调试输出文件。
我在这里错过了什么?
最佳答案
自从我使用 Borland 的工具链以来,我也在研究这个调试 TRACE 功能。我在解决这个问题时注意到了几件事。
- 确保
__TRACE
和__WARN
在#include <checks.h>
之前定义. 您还可以从翻译单元中删除#define __TRACE 和 __WARN,而是在编译期间使用 -D macroname 选项将其传递给 bcc32。 - _GetDiagGroupDef 未解决 BDS2006。 BDS2006 及更高版本附带的编译器工具链似乎缺少 checks.h 使用的一些函数和类实现——特别是 _GetDiagGroupDef。编译使用 checks.h 的测试示例时,我从链接器获得未解析的引用。当我使用 BCB 5.5.1 btw 时不会发生这种情况。使用 grep/findstr,checks.cpp 似乎已编译到 BCB5.5.1 的运行时库中,但 BDS2006 工具链中缺少它。我很惊讶你没有遇到同样的问题,也许我没有安装一些组件。我从旧的 borland 工具链中找到了一份 checks.cpp here .编译和链接应修复 Unresolved 错误。
- 教程说 outdbg1.txt 是一个临时文件,它只出现在 borland IDE 中——要使该文件实际存在,您必须保存它。这向我表明他们的 TRACE/WARN 宏实际上并没有输出调试文件。它可能正在将调试信息输出到 stderr 流。
如果情况确实如此,那么将 stderr 流重定向到一个文件应该会提供您正在寻找的内容。编译您的示例程序,然后像这样运行它:
myprogram.exe 2> outdbg1.txt
总而言之,您可能希望找到替代工具来帮助您完成调试过程。不幸的是,此处提供的 TRACE 和 WARN 宏文档很少,对于 borland/embarcadero 工具链的更高版本,它甚至无法正常工作,因为 rtl 没有将所需的函数/类编译到其中。因此,以下内容值得研究:
- OutputDebugString API。这样做的好处是,任何使用此 API 的监控程序都可以从您正在调试的程序中接收调试消息字符串。
- xUnit 测试框架。 Google Test值得一试。
- 当然还有您的标准集成 IDE 调试器 :P
关于c++ - 如何启用BDS2006的C++ WARN & TRACE宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2590726/