小编Tor*_*ten的帖子

使用gdb在C预处理器宏中调试崩溃

我有一个带有多行宏的C程序,程序在宏中崩溃,我怎样才能找到发生崩溃的位置?

这是我的程序的简化版本.实际上CRASHES是多条线很长并且不容易手动扩展.

#include <stdio.h>
#include <stdarg.h>
#define CRASHES(ptr) \
    (*(ptr) == 123)
main()
{
    char *foo = NULL;
    if (CRASHES(foo))
        printf("This will never happen.");
}
Run Code Online (Sandbox Code Playgroud)

在编译和运行时,gdb a.out我得到了预期的EXC_BAD_ACCESS(我在Mac OS X上使用gdb 6.3),但是崩溃指向第8行而不是第4行,实际上是崩溃.

我已经尝试使用其他调试标志编译程序,-gdwarf-2-g3按照文档的建议进行编译,并assert()在宏本身中插入了几个.不幸的是,没有提供更多信息.

c macros gdb c-preprocessor

2
推荐指数
1
解决办法
2178
查看次数

标签 统计

c ×1

c-preprocessor ×1

gdb ×1

macros ×1