使用GDB调试C程序,list却出现汇编代码,求解释。

结音入道 发布于 2012/04/13 20:29
阅读 1K+
收藏 0

我是在Fedora 16上使用C编写了一个程序。涉及了一些终端控制。出现段错误之后看源代码半天没有发现错误,只好借助GDB。但是可以说是第一次使用它,敲了list显示代码,结果却出现汇编代码。很奇怪,假如我没有run的话,就会出现c代码,但run了之后就是汇编代码了。

有图:

加载中
0
中山野鬼
中山野鬼
代码依次注释。 用#if 0 #endif。或者将main 内全部注释。这样总没错。然后依次释放代码出来,看哪些代码释放出来有错。然后进去分析。正向分析。分析时多加判断检测代码。
中山野鬼
中山野鬼
回复 @余书行 : 哈。这种方法等你到大系统时,就知道威力了。如果你模块非常清晰下。GDB,基本属于调试汇编用的。
结音入道
结音入道
谢谢老鬼哥了,问题已经解决。是几个操作的顺序反了,也可以算指针飞了吧。诶,用那个释放代码的方法找出问题的。辛苦~
0
中山野鬼
中山野鬼
肯定是汇编啊。如果不是汇编,给你C对于经过优化的情况下,你就是定点在某个C语言行,也没有用。
结音入道
结音入道
咳,我想我没有加入优化选项,应该不会自动加上吧。再说,要是这个样子,要调试器干啥?找不到哪里写错了。
0
中山野鬼
中山野鬼
你这个算是小错误啦。段错误基本是指针飞的情况。好查。我不建议用GDB,因为你查到最后发现,GDB给你的那点线索实在可怜,同时你还得看汇编。这是我个人(汇编抓BUG抓退休的)经验总结。
中山野鬼
中山野鬼
回复 @大东哥 : 我现在正在自己写这类测试手段的代码呢。把以前的系统的汇总一下。
大东哥
大东哥
除了GDB还有没有好的调试工具?C/C++的测试用的是什么工具?
结音入道
结音入道
OK,谢啦,我再仔细看看。嗯……明明把用到数组的地方都删掉了还是这个样子,诶……
0
捞炳成
捞炳成

引用来自“中山野鬼”的答案

代码依次注释。 用#if 0 #endif。或者将main 内全部注释。这样总没错。然后依次释放代码出来,看哪些代码释放出来有错。然后进去分析。正向分析。分析时多加判断检测代码。
高见
返回顶部
顶部