gcc -0g标志正在优化内联调用设置的变量

时间:2017-05-16 17:58:00

标签: debugging gcc optimization

在调试模式下编译软件时,我们的项目刚开始使用-Og标志,而不是-g3标志。

男子GCC说:

“ - Og优化调试体验。-Og支持不干扰调试的优化。它应该是标准编辑 - 编译 - 调试周期的优化级别,提供合理的优化级别,同时保持快速编译和良好的调试经验。“

问题是由内联调用设置的任何变量都是“优化的”,因此您不能使用变量执行“break if”命令或打印变量,直到其中任何一个被某些东西重置(不是内联函数)或直到变量向上或向下传递到一个新函数(然后你可以看到值等)我已经阅读了GCC手册页,但我没有看到任何关于这个问题或如何修复它除了回到-g3标志进行调试之外,不要使用-Og标志。那么在某种程度上使用-Og并且仍然可以在内联设置之后看到变量吗?

编译器是RH 7.3 OS的gcc版本4.8.5 20150623(Red Hat 4.8.5-11)(GCC),我们使用ddd作为GUI。

这是pid优化的非内联示例:

C单位得到pid检查。

    pid = et->printPid(); <= optimized out, can't set break if using pid
    if( pid > 0 ) <= optimized out, can do a break if
    {
        pid = waitpid( pid, &status, WNOHANG ); <= now you can "see" the pid setting and add break if
        if( pid == -1 )

FuEvEventTable.h

   pid_t printPid() { return( myPrintPid ); }

如果printPid是内联的(通常我们想要在类中返回或设置变量)同样的事情会发生,所以{return(myPrintPid);风格可能是问题。

0 个答案:

没有答案