使用GDB调试C程序,list却出现汇编代码,求解释。
我是在Fedora 16上使用C编写了一个程序。涉及了一些终端控制。出现段错误之后看源代码半天没有发现错误,只好借助GDB。但是可以说是第一次使用它,敲了list显示代码,结果却出现汇编代码。很奇怪,假如我没有run的话,就会出现c代码,但run了之后就是汇编代码了。
有图:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
代码依次注释。 用#if 0 #endif。或者将main 内全部注释。这样总没错。然后依次释放代码出来,看哪些代码释放出来有错。然后进去分析。正向分析。分析时多加判断检测代码。
OK,谢啦,我再仔细看看。嗯……明明把用到数组的地方都删掉了还是这个样子,诶……
除了GDB还有没有好的调试工具?C/C++的测试用的是什么工具?
回复
我现在正在自己写这类测试手段的代码呢。把以前的系统的汇总一下。
你这个算是小错误啦。段错误基本是指针飞的情况。好查。我不建议用GDB,因为你查到最后发现,GDB给你的那点线索实在可怜,同时你还得看汇编。这是我个人(汇编抓BUG抓退休的)经验总结。
咳,我想我没有加入优化选项,应该不会自动加上吧。再说,要是这个样子,要调试器干啥?找不到哪里写错了。
肯定是汇编啊。如果不是汇编,给你C对于经过优化的情况下,你就是定点在某个C语言行,也没有用。
谢谢老鬼哥了,问题已经解决。是几个操作的顺序反了,也可以算指针飞了吧。诶,用那个释放代码的方法找出问题的。辛苦~
回复
哈。这种方法等你到大系统时,就知道威力了。如果你模块非常清晰下。GDB,基本属于调试汇编用的。
代码依次注释。 用#if 0 #endif。或者将main 内全部注释。这样总没错。然后依次释放代码出来,看哪些代码释放出来有错。然后进去分析。正向分析。分析时多加判断检测代码。