У меня есть программа 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.");
}
При компиляции и запуске с помощью gdb a.out
я получаю ожидаемое EXC_BAD_ACCESS
(Я на Mac OS X с GDB 6.3), однако сбой указывает на строку 8, а не на строку 4, где сбой фактически вызван.
Я уже пытался скомпилировать программу с дополнительными флагами отладки -gdwarf-2
и -g3
, как предложено docs и вставил несколько assert()
s в сам макрос.К сожалению, это не предоставило больше информации.