在c+中跟踪系统函数调用+; 如何调用C++中的跟踪?请解释 例如,使用这个简单的代码 int x = 1; int y = 16; float z = 32.0; TRACE( "This is a TRACE statement\n" ); TRACE( "The value of x is %d\n", x ); TRACE( "x = %d and y = %d\n", x, y ); TRACE( "x = %d and y = %x and z = %f\n", x, y, z );

在c+中跟踪系统函数调用+; 如何调用C++中的跟踪?请解释 例如,使用这个简单的代码 int x = 1; int y = 16; float z = 32.0; TRACE( "This is a TRACE statement\n" ); TRACE( "The value of x is %d\n", x ); TRACE( "x = %d and y = %d\n", x, y ); TRACE( "x = %d and y = %x and z = %f\n", x, y, z );,c++,C++,如果您的意思是“如何跟踪代码的执行路径?”则需要使用源代码级符号调试器 在Linux中,这通常意味着使用GDB,其中有许多GUI前端;在命令行上使用GDB是一种晦涩而费劲的方法,例如可以通过Eclipse或KDevelop或独立的Insight调试器来使用。在Windows中,调试器将特定于编译器,但VC++提供了最好的调试器(并且在Express Edition中免费提供) 回应吊柱的编辑 定义跟踪宏,如下所示: #if defined NDEBUG #define TRACE( fo

如果您的意思是“如何跟踪代码的执行路径?”则需要使用源代码级符号调试器

在Linux中,这通常意味着使用GDB,其中有许多GUI前端;在命令行上使用GDB是一种晦涩而费劲的方法,例如可以通过Eclipse或KDevelop或独立的Insight调试器来使用。在Windows中,调试器将特定于编译器,但VC++提供了最好的调试器(并且在Express Edition中免费提供)

回应吊柱的编辑

定义跟踪宏,如下所示:

#if defined NDEBUG
    #define TRACE( format, ... )
#else
    #define TRACE( format, ... )   printf( "%s::%s(%d)" format, __FILE__, __FUNCTION__,  __LINE__, __VA_ARGS__ )
#endif

请注意,在
%s::%s(%d)
格式之间缺少逗号是故意的。它打印一个带有源位置前缀的格式化字符串。我经常在实时嵌入式系统中工作,因此我也会在输出中包含时间戳。

您需要详细说明。什么“痕迹”?什么操作系统?“痕迹”可能意味着很多事情;您希望/期望它做什么?好的,即使您编辑了它,我仍然建议您使用跟踪输出的调试器。我已经用一个建议的跟踪宏更新了我的答案。“在Windows中,它将是特定于编译器的”。。它们都调用Windows API方法OutPuxDebug字符串,它允许外部工具(例如调试器)读取输出。@ Trigver:我指的是符号调试器对编译器是特定的(因为在Linux中没有单一的事实上的C++编译器),而不是输出调试字符串的方法。答案的这一部分是在davit的解释性示例之前发布的,与调试字符串的输出无关,因为在发布示例之前,不清楚他的意图。@James McNellis:谢谢您的编辑;这就是我的意思,但我从一个旧项目的一些旧GCC 2.95代码中粘贴了它,从未注意到非标准的变量宏语法。当我使用这样一个宏时,让我措手不及的一件事是,
格式
必须是字符串文字。这几乎不重要,但我记得产生的错误信息相当隐晦。@Clifford:我认为最初的问题是“如何创建跟踪宏?”在所有编辑之后,我甚至不太清楚实际的问题是什么。