当前位置: 技术问答>linux和unix
使用GDB单步调试源码时,单步执行与源码不一致.
来源: 互联网 发布时间:2015-12-13
本文导语: 我编译MPLAYER后,它是用C语言写的,然后用GDB单步调试时,但代码和执行不匹配,具体表现为单步执行下一句代码时,它竟然跳到上面一行代码,或 者跳到其他函数(不是INLINE)函数,而且有些变量看不到.我确定调试的程序与源码是一致...
我编译MPLAYER后,它是用C语言写的,然后用GDB单步调试时,但代码和执行不匹配,具体表现为单步执行下一句代码时,它竟然跳到上面一行代码,或
者跳到其他函数(不是INLINE)函数,而且有些变量看不到.我确定调试的程序与源码是一致的,调试的程序是当前源码所编译联接产生的.
这个问题困绕我很久了.我的环境是 radhat eh4/fc5 ,gcc 3.4.4,gdb 6.3.0.0
我在FC5上编译,然后调试也是一样的错误.
|
最大的可能就是,mplayer的Makefile中的编译命令行使用了-O选项(代码优化),这样,编译出的代码已经被compiler给处理过了。不和原来的源代码一一对应。
-g选项应该有的(现在应该也有了),不然你都看不到源码的对吧。
所以你改改Makefile或.configure或Makefile.in,看看将编译命令行中的-O去掉,加上-g(如果没有)
-g选项应该有的(现在应该也有了),不然你都看不到源码的对吧。
所以你改改Makefile或.configure或Makefile.in,看看将编译命令行中的-O去掉,加上-g(如果没有)