逛知乎时刷到了这篇文章1,讲述了如何在GDB中调试宏,笔者在复现的时候未成功,一直显示上下文中找不到对应的符号,用文中的-g3方法仍然无法打印出该符号,使用文中的方法利用readelf查看生成的调试信息,可以看到对应的宏信息,但仍然无法打印该标志。
经过查询找到了这篇文章2,给出了新的调试标志-gdwarf-2。
文中使用的是C++,这里笔者使用gcc,除该标志外其余均与文章1相同,复现了该实验,证明了只有添加上述标志才能正确打印出宏信息。
文章1中只有程序截图,并没有代码,此处附上代码,供有兴趣的同学尝试。
#define MONDAY 1
#define MAX(a, b) ((a > b) ? (a) : (b))
int main() {
return 0;
}