您的位置:首页 > 其它

Anjuta IDE 下调试程序容易忽略的一个问题

2009-05-09 23:41 344 查看

Anjuta IDE 下调试程序容易忽略的一个问题

首先说一下我的系统环境:系统是Ubuntu
8.10,安装了build-essential,升级到最新版的gcc和libc等,其他还安装有gtk相关的库与开发环境,可以配合glade3进行gnome图形界面开发。

平 时主要用的是Anjuta
IDE,版本是2.4.1,应该是比较新的稳定版了。总体感觉不错,不过总觉得其内置的调试器有时候行为比较奇怪,比如有时它不在你下断点的地方停止,或
者按下F5进行单步运行时发现程序并没有按应有的逻辑运行。典型的问题是,如果将断点下在局部变量赋值或者判断的地方,调试器就无法识别这个变量,而且无
法进入for循环之内跟踪等等。如下是一个例子:




中可见,断点明明设在49行,但用shift+F12启动调试后,程序直接中断在了50行。而且按下F5单步运行时也不会进入for循环,而是直接跳出了
循环,执行下一条语句。另外,监视中指定了“idx”这个变量,但数值和类型都是“?”,显然未能识别。不过虽然如此,其他代码,比如printf或者函
数调用则能正常跟踪调试。

后来参考了anjuta的manual,发现有这样一条note:

In
order to better user the debugger, it is strongly recommended to
debug program with debugging information (-g for gcc) and no
optimization (-O0 for gcc). This can be done by selecting the Debug
configuration before building the program for the first time.


于每次运行程序都是直接用向导生成工程,然后直接通过automake,autoconfig之类的自动工具完成相关文件生成,没有关心具体的编译参数等
配置选项。而上面的文字里提到了需要启用调试信息(-g参数),并且要禁止代码优化(-O0参数),因此很可能是这个问题。经过一番测试,最终最简单的方
法如下:

首先需要清理一下配置,在“生成”菜单下最后有一个“清理配置”功能,点击即可。




后打开“生成”菜单下的“配置工程”对话框,可见有个“配置”下拉菜单,默认都是“默认”,此外还有“调试”等其他选项。这里不需要选其他的,且构建目录
不要改变,直接勾选“重新生成工程”,然后在“配置选项”里填入代码'CFLAGS=-g
-O0' 'CXXFLAGS=-g -O0' 'JFLAGS=-g -O0' 'FFLAGS=-g -O0'(包括单引号),执行即可。

如果执行过程是successful的,那么就可以用shift+F11生成工程了。如果一切顺利,现在就能正常调试了。比如我的例子中,同样的断点,经过如上处理后调试结果如下:



明显可见程序正确地在断点位置中断了。而且变量idx也能被正常识别了。

综上,这个问题其实很简单,就是因为没有按照调试的配置对程序进行编译链接而造成的调试功能不能完全运作。当然,当调试完成想恢复正常配置时,重复上述步骤,并在配置选项里留空,再重新配置并生成工程即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: