Anjuta IDE 下调试程序容易忽略的一个问题
2009-05-09 23:41
344 查看
Anjuta IDE 下调试程序容易忽略的一个问题
首先说一下我的系统环境:系统是Ubuntu8.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也能被正常识别了。
综上,这个问题其实很简单,就是因为没有按照调试的配置对程序进行编译链接而造成的调试功能不能完全运作。当然,当调试完成想恢复正常配置时,重复上述步骤,并在配置选项里留空,再重新配置并生成工程即可。
相关文章推荐
- 关于调试程序容易忽略的问题
- 调试使用了函数模块的程序时需要注意的一个小问题
- 今天调试程序遇到了一个致命问题语法错误操作符丢失
- c#开发中程序集调用时容易忽略的问题
- 解决vc++DEBUG ERROR问题前几天师弟调试程序的时候出现了这样一个错误,出错的位置是在delete [] 一个动态分配的数组时出现的。 经过调查发现错误是因为他之前在给数组赋值的时候越界了
- 探讨使用外联接(OUTER JOIN)联接两表时容易忽略的一个小问题
- 页面回发,一个容易被忽略的问题!
- 调试使用了函数模块的程序时需要注意的一个小问题
- 关于oracle sql优化的一个容易忽略的问题。
- 关于,VS2010 里面 一个解决方案包含多个win32程序,调试的问题~~~happy
- 新手在sae部署程序容易忽略的一个细节
- 重叠I/O网络编程使用AcceptEx时容易忽略的一个问题
- VS2005中一个简单程序无法调试的问题(摘)
- 关于JVM一个容易被忽略的小问题
- PHP获取上个月最后一天的一个容易忽略的问题
- 一个asp程序做出来的网站调试是否容易?
- gdb调试程序中遇到的一个问题
- 【.NET深呼吸】清理对象引用,有一个问题容易被忽略
- 今天调试一个WebPart的简单程序出现的问题
- VS2005多线程程序在IDE下调试的一个问题