当在REDHAWK IDE中逐步调试时,行标记有时似乎没有遵循正确的程序流程,并且并非所有变量似乎都没有正确更新。
我在黑板上运行多个组件。我通过打开组件的.spd.xml文件并单击" debug as"来开始调试。概述选项卡上的超链接。这将组件添加到黑板与其他组件。启动所有组件后,调试器会到达我的断点。
是否有人遇到过这些症状(数据未更新或程序错误踩踏)?如果是这样,原因是什么以及如何克服这个原因?
谢谢,
- 麦克
答案 0 :(得分:1)
您可能正在调试C ++可执行文件。编译源代码时,编译器执行了某些优化,这些优化可能导致机器代码与源代码相比出现故障。这些优化还可以从范围中删除变量。优化级别是编译期间的参数。 REDHAWK中使用的默认级别是-O2。有关详细信息,请参阅GCC手册页(http://linux.die.net/man/1/gcc)。
如果您拥有此组件的源代码,请尝试以下操作:
make clean; # Remove the binaries previously compiled if any.
./reconf;
./configure;
# Stop here and check the config.log file and search for CXXFLAGS, at the bottom of the log file you'll notice that they are by default set to '-g -O2'.
make V=1 #The V=1 will set the verbose flag and you'll see the calls to g++/gcc. Notice that the CXXFLAGS are in the g++ calls.
To override the CXXFLAGS you may call configure like so:
./configure 'CXXFLAGS=-O0 -g'
现在,当您重新运行V = 1时,您将看到优化级别已从2减少到零。这可能会解决您的调试问题,但却产生了一个不太优化的二进制文件。