C-SPYでの同名変数の解決
テクニカル・ノート 45813
アーキテクチャ:
Arm, RL78
コンポーネント:
debugger
更新日:
2018/08/13 5:12
はじめに
アプリケーション内に同じ名前の変数がいくつか存在する場合、そのような
変数にブレークポイントを設定するのは難しい場合があります。
解説
C-SPY マクロまたは Watch(ウォッチ)ウィンドウを使って変数にブレーク
ポイントを設定しようとしても、うまくいかないことがあります。このようなこと
が起きる理由として、C-SPY による複数の同名変数の検出が挙げられます。
このテクニカル・ノートでは、このような状況の解決策を示します。
解決法
シンボルの位置情報を含む指定参照を使用してください。以下は、シンボル
位置の構文です:
module\function::symbol
以下に 5 つの例を示します。
例 A
2 つのファイル main.c と test.c に、 testvar という静的 global(ファ
イル間グローバル)変数が含まれている場合、Watch(ウォッチ)ウィンドウ
で以下の構文を使用します。
main\testvar
test\testvar
例 B
ファイル main.c 内に、ローカル変数 testvar を持つ testfunc という
関数が含まれている場合、Watch(ウォッチ)ウィンドウで以下の構文を使用
します。
main\testfunc::testvar
関数名がそれぞれ固有なものであれば、main\は不要ですが、追加イメー
ジを使ったデバッグでは、デバッグ情報関数名が一意でない場合がありま
す。このような時は、固有のモジュール名を使用するのが賢明です。
例 C – C-SPY マクロでの使用
C-SPY マクロ(__setSimBreak 等)を使う場合、以下のように、
バックスラッシュ( ¥ )にバックスラッシュをもう 1 つ追加して保護する必要が
あります。
__setSimBreak("main\\testvar", "R", "Do_the_testvar_Read_action()");
例 D – C-SPY での表示
archive 内に、C-SPY がこの状況をどのように扱うかを 4 つの図で示してい
ます。
- ソースファイルに main.c, f1.c, f2.c があります。
- それぞれのファイル内に static int it 変数があります。
- Watch(ウォッチ)ウィンドウでは、it変数は、itとして参照される他、main\it, f1\it, f2\it としても参照されます。ここでit参照は、非指定参照です。
- 各関数へと実行が移り(その後、main関数に戻る)、itの非指定参照によって、メモリの値と場所がどのように変更されるかを示しています。
例 E – Syntax error
名前が同じであることで、構文シンタックスエラーが起きる恐れがあります。以下が存在する場合:
- t0 という名前の module(ファイル名 t0.c)
- t0 という名前の typedef
- t という名前の variable
t0\t を参照すると、次のエラーが発生します。
[syntax error, unexpected BACKSLASH, expecting COLON2]
他にもいくつか選択肢があります(それぞれ制限や欠点があります)。
- Statics (静的変数)ウィンドウを使う
- エディタウィンドウの変数上で右クリックし、Watch(ウォッチ)ウィンドウに追加する。
- 適用範囲外では、変数は曖昧で不定であることを受け入れる。
- module または typedefの名前を変更する。
まとめ
C-SPY に、Module 名、Function 名、 Symbol 名を知らせることで、同じ名
前の変数の中から 1 つだけ参照できるようになります。
デバッグガイドの C-SPY 式で、さらに詳しい例をご覧いただけます。
全ての製品名は、それぞれの所有者の商標または登録商標です