为了调试递归程序,我发现可视化我的函数调用的嵌套深度很有用。我很想有类似的东西__func__
,但是我的堆栈跟踪有多深,而不是我的函数名是什么。我知道编译器不可能简单地知道这一点,因为您的嵌套程度是一个动态生成的值。但是编译器添加功能来实现这一点并不难,您可以简单地在 each 之前将 1 添加到全局计数器,然后call
在 eat 之前减去 1 ret
。
我正在使用以下调试语句(在此处找到):
#define printdbg(Level, formatString, ...) \
do { \
fprintf(stderr, "%s:%d %s: " formatString "\n", \
__FILE__, __LINE__, __func__, ##__VA_ARGS__); \
if (Level == LEVEL_ERROR) { printf("quitting\n"); exit(1); }\
} while (0)
我想在开始时添加一个额外的预定义标识符,我可以在其中利用某种形式的东西,在每个调试语句的开头printf("%*s", __NEST__+1, ":")
打印总共空格,让我可视化每个调试语句的堆栈深度__NEST__
制成。
我知道我可以简单地++
在每个函数的开头和--
结尾都有一个全局计数器,但我刚刚了解了预定义的标识符,它们太酷了!此外,无需重新发明轮子。
我在网上的任何地方都找不到受支持的预定义标识符列表。我发现的只是this和this,两者都没有声称是全面的。如果存在等价物__NEST__
,那么这里的某个人可能知道我正在寻找的一个词。如果它不存在,那么我在哪里可以找到所有预定义标识符的详细记录列表?