在 REDHAWK IDE 中逐步调试时,行标记有时似乎没有遵循正确的程序流程,并且并非所有变量似乎都没有正确更新。
我正在使用多个组件在黑板上运行。我通过打开组件的 .spd.xml 文件并单击概览选项卡上的“调试为”超链接开始调试。这会将组件与其他组件一起添加到黑板上。在我启动所有组件后,调试器会命中我的断点。
有没有人经历过这些症状(数据未更新或程序错误步进)?如果是这样,是什么原因,我该如何克服?
谢谢,
- 麦克风
在 REDHAWK IDE 中逐步调试时,行标记有时似乎没有遵循正确的程序流程,并且并非所有变量似乎都没有正确更新。
我正在使用多个组件在黑板上运行。我通过打开组件的 .spd.xml 文件并单击概览选项卡上的“调试为”超链接开始调试。这会将组件与其他组件一起添加到黑板上。在我启动所有组件后,调试器会命中我的断点。
有没有人经历过这些症状(数据未更新或程序错误步进)?如果是这样,是什么原因,我该如何克服?
谢谢,
- 麦克风
您很可能正在调试 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'
现在,当您重新运行 make V=1 时,您会看到优化级别已从 2 降低到零。这可能会解决您的调试问题,但会生成优化程度较低的二进制文件。