C-SPYでの同名変数の解決

テクニカル・ノート 45813

アーキテクチャ:

Arm, RL78

コンポーネント:

debugger

更新日:

2018/08/13 5:12

はじめに

アプリケーション内に同じ名前の変数がいくつか存在する場合、そのような
変数にブレークポイントを設定するのは難しい場合があります。

解説

C-SPY マクロまたは Watch(ウォッチ)ウィンドウを使って変数にブレーク
ポイントを設定しようとしても、うまくいかないことがあります。このようなこと
が起きる理由として、C-SPY による複数の同名変数の検出が挙げられます。
このテクニカル・ノートでは、このような状況の解決策を示します。

解決法

シンボルの位置情報を含む指定参照を使用してください。以下は、シンボル
位置の構文です:

module\function::symbol

以下に 5 つの例を示します。 

例 A

2 つのファイル main.ctest.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.cf2.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 式で、さらに詳しい例をご覧いただけます。

 

全ての製品名は、それぞれの所有者の商標または登録商標です 

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。