Jon*_*ler 16
您可以使用__LINE__,同时__FILE__报告源代码中出现问题的位置.
例如,考虑assert()宏 - 这个来自C99标准的措辞,但C++是相似的,除了它没有提到__func__:
当它被执行时,如果表达式(它应具有标量类型)为假(即,比较等于0),则断言宏写入有关失败的特定调用的信息(包括参数的文本,名称源文件,源行号和封闭函数的名称 - 后者分别是实现定义格式的标准错误流上的预处理宏
__FILE__和__LINE__标识符 的值__func__.
#define assert(x) (void)(((x)==0)?_Assert(#x,__FILE__,__LINE__,__func__):0)
Run Code Online (Sandbox Code Playgroud)
一个更简单的例子,这是我在所有其他形式的调试失败时偶尔使用的宏:
#define GOT_HERE std::cout << "At " __FILE__ ":" << __LINE__ << std::endl
Run Code Online (Sandbox Code Playgroud)
然后,当你的代码神秘地崩溃并用它取下设备时,你至少可以将这个宏自由地放入源中,希望它能让你缩小崩溃发生的位置(以及重复之后).在实践中,您可能不会写入std :: cout,而是使用平台上可用的最低级别,最可靠的字符输出.
我为malloc写了一个包装器:
#if DEBUG #define malloc(s) debugging_malloc(s, __FILE__, __LINE__) #define free(p) debugging_free(p) // Also, calloc(), strdup(), realloc() should be wrapped. #endif // DEBUG
在包装器中,根据发生的文件和行号来跟踪分配.程序退出时,实用程序功能输出任何不同块的列表.
如果你正在使用gcc,它也会给你__FUNCTION__,这真的很棒.符合C99标准的编译器也__func__同样方便.
| 归档时间: |
|
| 查看次数: |
4930 次 |
| 最近记录: |