我有一个带有多行宏的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()在宏本身中插入了几个.不幸的是,没有提供更多信息.