如何查看gcc -g 与 -O的差别

qiang81020 2012-04-19 05:47:00
前段时间遇到个奇怪的问题,在编译SO库时,使用-g编译,调用一点问题没有,但是一旦使用-O编译,程序就会CORE。

我知道有个-i的选项,是否使用gcc -g -i....与gcc -O3 -i...得到优化后的代码进行再进行比对?我看过优化后的代码,说实话,不太容易懂。

有没有更好的办法能知道优化后的代码有什么区别?或者帮忙提供下优化后代码的阅读方法,或者还需要哪些知识储备才能读明白优化后的代码。。。

望各位朋友解答。谢过!

GCC版本记不清了。。。

(另:其实我最希望的是编译器的BUG。。哈哈。。那就跟我没什么关系了。。)
...全文
1430 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiang81020 2012-04-24
  • 打赏
  • 举报
回复
哎。。。学习的不够深入啊。。。
qiang81020 2012-04-24
  • 打赏
  • 举报
回复
可以结了。。。收获很大。。谢谢大家
qq120848369 2012-04-19
  • 打赏
  • 举报
回复
出core先bt看一下core在哪啊,有core不看算神马。
xunxun 2012-04-19
  • 打赏
  • 举报
回复
另外你可以使用

gcc -O1 -Q --help=optimizers

来查看-O1的哪些开关开启(-O1就等效那些enable的开关,可以把-O1去掉,加上那么enable的开关,这样和-O1的表示是一致的),有些可能是编译器优化的bug

你可以确定哪些优化有问题

比如你查到-fdce有问题
那么你可以使用-O1 -fno-dce来使得这个开关disable(一定要在-O1后面否决)

以上适用于GCC编译器的bug以及你实在不知道哪里有问题的处理
nice_cxf 2012-04-19
  • 打赏
  • 举报
回复
也有可能是多线程程序由于优化导致逻辑改变,这种问题还是很难查的
qiang81020 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

gcc -v 输出gcc版本

这种问题,一般是 代码问题。
几乎没疑问的
[/Quote]
我也希望是代码有问题,代码有问题才好解决。

这个问题也只有在用户的机器上才出现,我自己的虚拟机从来没出过。。所有我才会怀疑是GCC可能有BUG。。。
qiang81020 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

-O1 -O2 -O3 -Os都有问题否?

难道你不可以-g -O3编译下自行调试么

这个问题等同于windows下的debug正常,release有问题
[/Quote]
只要-O 1,2,3都是一样的效果。

-g -O3我还真没试过,但是一般-g了我就不优化了,不然如果单步的话,代码是混乱的。

而且只有在多线程的调用才会CORE。


-g -O3是个办法。先谢
hen_hao_ji 2012-04-19
  • 打赏
  • 举报
回复
很坚定的相信,楼上的就是对的。。
xunxun 2012-04-19
  • 打赏
  • 举报
回复
-O1 -O2 -O3 -Os都有问题否?

难道你不可以-g -O3编译下自行调试么

这个问题等同于windows下的debug正常,release有问题
evencoming 2012-04-19
  • 打赏
  • 举报
回复
gcc -v 输出gcc版本

这种问题,一般是 代码问题。
几乎没疑问的

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧