ウォッチウィンドウでローカル変数の値が確認できない
テクニカル・ノート 180504J
アーキテクチャ:
ARM
コンポーネント:
debugger
更新日:
2018/09/04 5:25
はじめに
このテクニカルノートは、デバッグセッション中にウォッチウィンドウでローカル変数の値が確認できない事象について説明します。
解説
コンパイラは、予想される動作が実行できる範囲内であれば、可能な限り自由にアプリケーションソフトウェアを最適化します。最適化によって、コードが影響を受けます。生成されたコードがソースコードにどう関連するかが明確でなくなり、デバッグがより困難になるためです。
通常は、高いレベルで最適化を行うと、コードに変更が生じ、予想と違って、変数の値を参照できなくなります。
1 つ例を示します。
myFunction()
{
int i = 42;
...
x = computer(i); /* ここで、i の値はC-SPY に認識されています */
...
}
変数i が宣言されてから実際に使用されるまで、コンパイラはその変数用のスペースをスタックやレジスタに確保する必要はありません。コンパイラはこのコードを最適化できますが、C-SPY はその変数が実際に使用されるまでその値を表示できなくなります。一時的に使用できない状態にある変数の値を表示しようとすると、C-SPY は以下のメッセージを表示します。
使用不可能
デバッグセッションで変数の値を常に把握する必要がある場合は、コンパイル時に一番低い最適化レベル、[なし]を指定する必要があります。
まとめ
最適化レベルを高くするとコードに変更が生じ変更が生じ、変数の値を参照できなくなることがあります。
「C-SPYデバッグガイド」にある「最適化の影響」の項をご参照ください。
全ての製品名は、それぞれの所有者の商標または登録商標です