0

REDHAWK IDE でデバッグを実行すると、行マーカーが適切なプログラム フローに従っていないように見えたり、すべての変数が適切に更新されていないように見えることがあります。

複数のコンポーネントを使用して黒板で実行しています。コンポーネントの .spd.xml ファイルを開いてデバッグを開始し、[Overview] タブの [debug as] ハイパーリンクをクリックします。これにより、コンポーネントが他のコンポーネントとともに黒板に追加されます。すべてのコンポーネントを開始した後、デバッガーがブレークポイントにヒットします。

これらの症状 (データが更新されない、またはプログラムが正しく実行されない) のいずれかを経験した人はいますか? もしそうなら、何が原因で、どうすればこれを克服できますか?

ありがとう、

- マイク

4

1 に答える 1

1

C++ 実行可能ファイルをデバッグしている可能性があります。ソース コードがコンパイルされると、コンパイラは特定の最適化を実行しました。これにより、ソース コードと比較して、マシン コードの順序が乱れる可能性があります。これらの最適化により、スコープから変数が削除される場合もあります。最適化レベルは、コンパイル中のパラメーターです。REDHAWK で使用されるデフォルトのレベルは -O2 です。詳細については、GCC の man ページ ( 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 から 0 に減っていることがわかります。これにより、デバッグの問題が解決される可能性がありますが、最適化されていないバイナリが生成されます。

于 2014-11-03T19:40:35.827 に答える