c++ - 如何启用BDS2006的C++ WARN & TRACE宏

标签 c++ debugging c++builder trace

我正在尝试了解如何启用(和使用)Borland 的 WARN 和 TRACE 宏。

我的出发点是这个链接: http://bcbjournal.org/articles/vol2/9809/Debugging_with_diagnostic_macros.htm?PHPSESSID=37bf58851bfeb5c199d1af31d7b2e7ff

但是,这似乎是针对 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 工具链中缺少它。我很惊讶你没有遇到同样的问题,也许我没有安装一些组件。我从旧的 bo​​rland 工具链中找到了一份 checks.cpp here .编译和链接应修复 Unresolved 错误。
  • 教程说 outdbg1.txt 是一个临时文件,它只出现在 borland IDE 中——要使该文件实际存在,您必须保存它。这向我表明他们的 TRACE/WARN 宏实际上并没有输出调试文件。它可能正在将调试信息输出到 stderr 流。

如果情况确实如此,那么将 stderr 流重定向到一个文件应该会提供您正在寻找的内容。编译您的示例程序,然后像这样运行它:

myprogram.exe 2> outdbg1.txt

总而言之,您可能希望找到替代工具来帮助您完成调试过程。不幸的是,此处提供的 TRACE 和 WARN 宏文档很少,对于 borland/embarcadero 工具链的更高版本,它甚至无法正常工作,因为 rtl 没有将所需的函数/类编译到其中。因此,以下内容值得研究:

  1. OutputDebugString API。这样做的好处是,任何使用此 API 的监控程序都可以从您正在调试的程序中接收调试消息字符串。
  2. xUnit 测试框架。 Google Test值得一试。
  3. 当然还有您的标准集成 IDE 调试器 :P

关于c++ - 如何启用BDS2006的C++ WARN & TRACE宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2590726/

相关文章:

c++ - 变量在 while 语句中保存数据

c++ - 临时文件流

c# - 如何在VS2010中的每个方法中设置断点

c++ - embarcadero WindowHandleToPlatform c++ 示例

c++ - 在 mac 上用 system( ) 打开 excel 文件?

c# - 模块窗口中缺少一些 DLL

Android 基本编码尝试 Catch Show Toast 不起作用?

c++ - 从头文件中分解 C++ 源代码

c++ - 将 Vcl::Controls::TCaption aka (System::UnicodeString) 转换为 const char *

c++ - MPI_Recv 中的消息被截断