当使用 -fomit-frame-pointer 时(对于各种 -O 设置是自动的),执行回溯会出现问题。我想知道是否有一种方法可以在编译时确定代码是使用此开关编译的?在这种情况下,我可以放入 #ifndef 来防止在不明智的情况下进行回溯。
当这个 -fomit-frame-pointer 开关打开时,是否设置了任何宏?
谢谢
设置Jmp
最佳答案
我刚刚尝试过这个:
gcc -E -fomit-frame-pointer -Wp,-dM foo.c > fpo.out gcc -E -Wp,-dM foo.c > no-fpo.out diff no-fpo.out fpo.out
其中foo.c是一个简单的“Hello World”程序,并没有得到任何结果。这意味着无论是否使用 -fomit-frame-pointer
,所有预处理器宏都是相同的。所以我认为你的问题的答案是“不”。
也许您能做的最好的事情就是在使用时修改您的 Makefile(或您的构建过程使用的任何内容)来定义您自己的宏(例如 -DNO_FRAME_POINTERS
或其他内容) -fomit-frame-pointer
。
关于c - 有没有gcc宏来确定帧指针没有被消除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1415414/