c - 有没有gcc宏来确定帧指针没有被消除?

标签 c pointers frame backtrace

当使用 -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/

相关文章:

ios - 寻求特定时间线后的 MPMoviePlayerController 空白帧

ios - 如何检测两个UIView的边框是否接触?

c - 从C语言文件中读取文本

c - 指针和 const 变量

c++ - 计算创建为双指针的两个暗数组的大小

c - 用指针构建一个 strend 函数

c - 避免在 C 程序中使用 main(入口点)

c - 在 C 中为结构分配正确的值时遇到问题

c++ - 重新检查时指针属性发生变化

c# - 保存来自网络摄像机 RTP 流的 JPEG 文件