各パネル/ダイアログへの入力規約を次に示します。
入力を許可している文字セットは次のとおりです。
|
|
ASCII
|
半角のアルファベット(英字),半角の数字,および半角の記号
|
Shift-JIS
|
全角のアルファベット(英字),全角の数字,全角の記号,ひらがな,全角のカタカナ,漢字,および半角のカタカナ
|
EUC-JP
|
全角のアルファベット(英字),全角の数字,全角の記号,ひらがな,全角のカタカナ,漢字,および半角のカタカナ
|
UTF-8
|
全角のアルファベット(英字),全角の数字,全角の記号,ひらがな,全角のカタカナ,漢字(中国語を含む),および半角のカタカナ
|
UTF-16
|
全角のアルファベット(英字),全角の数字,全角の記号,ひらがな,全角のカタカナ,漢字(中国語を含む),および半角のカタカナ
|
入力を許可しているエスケープ・シーケンスは次のとおりです。
|
|
|
\0
|
0x00
|
null文字
|
\a
|
0x07
|
アラート
|
\b
|
0x08
|
バックスペース
|
\t
|
0x09
|
水平タブ
|
\n
|
0x0A
|
改行
|
\v
|
0x0B
|
垂直タブ
|
\f
|
0x0C
|
フォーム・フィード
|
\r
|
0x0D
|
キャリッジ・リターン
|
\"
|
0x22
|
ダブルクォーテーション
|
\'
|
0x27
|
シングルクォーテーション
|
\?
|
0x3F
|
疑問符(?と入力された場合も疑問符として扱います)
|
\\
|
0x5C
|
バックスラッシュ
|
数値を入力する際に許可している進数は次のとおりです。
|
|
2進数
|
0bで始まり,0~1の数字が続く数値
|
8進数
|
0で始まり,0~7の数字が続く数値
|
10進数
|
0以外で始まり,0~9の数字が続く数値
|
16進数
|
0xで始まり,0~9の数字,およびa~fの英字が続く数値
(英字の大文字/小文字については,不問)
ただし,
マークが表示されている入力エリアでは,0xの接頭辞は必要ありません。
|
式とは,定数,レジスタ名,SFR名,シンボル,およびこれらを演算子で結合したものを示します。
式には,アドレス式とウォッチ式があります。シンボルのアドレスを必要とする式をアドレス式,シンボルの値を必要とする式をウォッチ式と呼びます。
アドレス式では,シンボルのアドレスを使用して演算します。CPUレジスタ名が記述された場合のみ,値を使用して演算します。
アドレス式の基本入力形式は次のとおりです。
|
|
C/C++言語変数名注1,2
|
C/C++言語の変数のアドレス
|
式[式]注3
|
配列のアドレス
|
式.メンバ名注4
|
構造体/共用体/クラスのメンバのアドレス
|
式->メンバ名注4
|
ポインタの指し示す構造体/共用体/クラスのメンバのアドレス
|
ウォッチ式.*キャスト式
|
メンバ変数へのポインタのアドレス
|
ウォッチ式->*キャスト式
|
メンバ変数へのポインタのアドレス
|
CPUレジスタ名
|
CPUレジスタの値
|
SFR名
|
SFRのアドレス
|
ラベル名注5,EQUシンボル名注5,[即値]
|
ラベルのアドレス,EQUシンボルの値,即値アドレス
|
整定数
|
アドレス
|
注 1. | C言語(C89/C99),C++言語の変数を表します。 |
注 2. | C言語変数の値がレジスタに割り付いている場合は,エラーになります。 |
注 3. | インデックスとして入力された式は,ウォッチ式として解析します。 |
注 4. | 基底クラスのメンバ変数を指定する場合,メンバ名の前にスコープを指定してください。(例:variable.BaseClass::member)。 |
注 5. | ラベル名またはEQUシンボル名に“$”が含まれている場合,名前を“{}”で囲んでください(例:{$Label})。
“I”は虚数のキーワードとなるため,CPUレジスタの“I”を指定する場合は,“:REG”を付加してください(例:I:REG)。 |
また,「表 2.27 アドレス式の基本入力形式」から,次の演算子を用いたアドレス式を構成することができます。
|
|
(式)
|
演算順序の指定
|
-式
|
符号反転
|
!式
|
論理否定
|
~式
|
ビット反転
|
式*式注
|
乗算
|
式/式注
|
除算
|
式%式注
|
剰余算
|
式+式注
|
加算
|
式-式注
|
減算
|
式&式注
|
ビットごとの論理積
|
式^式注
|
ビットごとの排他的論理和
|
式|式注
|
ビットごとの論理和
|
注 | 変数,および関数は,変数/関数/整定数以外と演算子で結合することはできません(例:C言語変数名+ SFR名)。 |
ウォッチ式ではシンボルの値を使用して演算します。値が存在しない場合のみ,シンボルのアドレスを使用して演算します(例:main( ) + 1)。
ウォッチ式の基本入力形式は次のとおりです。
|
|
C/C++言語変数名注1
|
C/C++言語の変数の値
|
式[式]
|
配列の要素値
|
式.メンバ名注2
|
構造体/共用体/クラスのメンバ値
|
式->メンバ名注2
|
ポインタの指し示す構造体/共用体/クラスのメンバ値
|
ウォッチ式.*キャスト式
|
メンバ変数へのポインタの値
|
ウォッチ式->*キャスト式
|
メンバ変数へのポインタの値
|
*式
|
ポインタの変数の値
|
&式
|
配置アドレス
|
CPUレジスタ名
|
CPUレジスタの値
|
SFR名
|
SFRの値
|
ラベル名注3,EQUシンボル名注3,[即値]
|
ラベルの値,EQUシンボルの値,即値アドレスの値
|
整定数
|
整数の定数値
|
浮動定数
|
浮動小数点の定数値
|
文字定数
|
文字定数値
|
注 1. | C言語(C89/C99),C++言語の変数を表します。 |
注 2. | 基底クラスのメンバ変数を指定する場合,メンバ名の前にスコープを指定してください。(例:variable.BaseClass::member)。 |
注 3. | ラベル名またはEQUシンボル名に“$”が含まれている場合,名前を“{}”で囲んでください(例:{$Label})。
虚数の値には,大文字の“I”を掛けてください(例:1.0 + 2.0*I)。なお“I” は虚数のキーワードとなるため,CPUレジスタの“I”を指定する場合は,“:REG”を付加してください(例:I:REG)。 |
また,「表 2.29 ウォッチ式の基本入力形式」から,次の演算子を用いたウォッチ式を構成することができます。次表の演算子は,C言語仕様に従って式を解析します。
|
|
(式)
|
演算順序の指定
|
!式
|
論理否定
|
~式
|
ビット反転
|
式*式注
|
乗算
|
式/式注
|
除算
|
式%式注
|
剰余算
|
式+式注
|
加算
|
式-式注
|
減算
|
式&式注
|
ビットごとの論理積
|
式^式注
|
ビットごとの排他的論理和
|
式|式注
|
ビットごとの論理和
|
注 | 変数,および関数は,変数/関数/整定数以外と演算子で結合することはできません(例:C言語変数名+ SFR名)。 |
注意 1. | 異なるソース・ファイルに無名名前空間を記述し,その中に同名の変数を定義した場合,ウォッチ パネルでは,最初に見つかる変数の情報を表示します。 |
注意 2. | 以下のプログラムに定義されたメンバ変数ポインタ“mp1”をウォッチ パネル,およびローカル変数 パネルに登録した場合,型名に“int Foo::*”ではなく“int *”と表示されます。 |
class Foo {
int m1;
};
int Foo::*mp1 = &Foo::m1;
|
注意 3. | 下記のようなchar型の一次元配列がレジスタやメモリの複数個所に割り付いていた場合は,ウォッチ パネル,およびローカル変数 パネルに配列“array”を登録しても値のカラムに文字列を表示できません。
char array[5] = "ABCD"; |
注意 4. | ローカル変数 パネルの[スコープ]にて“カレント”以外を選択中は,レジスタに割り付いた変数の値は正しく表示できません。また,その変数の値を編集することもできません。 |
注意 5. | 以下の条件をすべて満たす変数を定義した場合,ウォッチ パネル,ローカル変数 パネルでは,対象のメンバ変数の割り付き位置文字列が変数全体の割り付き位置文字列で表示されます。 |
【条件】
<1> | 定義した変数が複数のアドレスやレジスタに割り付いている。
(アドレスカラムに2つ以上のアドレスやレジスタ名が表示される場合) |
<2> | 変数に以下の型のメンバが定義されている。
構造体,クラス,配列,共用体のいずれか |
【例】
struct Mem {
long m_base;
};
struct Sample {
long m_a;
struct Mem m_b; <-条件<2>に該当
};
main () {
struct Sample obj;
}
|
表示結果:
"obj" - { R1:REG, R2:REG } (struct Sample)
L m_a 0x00000000 { R1:REG } (long)
L m_b - { R1:REG, R2:REG } (struct Base)
L m_base 0x00000000 { R2:REG } (long)
|
注意 6. | ウォッチ パネルで変数を他の型へキャストした場合,Cスタイルのキャストを行います。
このため,例えば仮想継承クラスの基底クラスへのキャスト結果は,プログラム中で記述したキャスト結果と異なります。 |
class AAA [
int m_aaa;
} objA;
class BBB : public AAA { //BBBはAAAを継承している
int m_bbb;
} objB;
class CCC { //CCCはAAAを継承していない
int m_ccc;
} objC
class DDD : virtual public AAA { //DDDはAAAを仮想継承している
public:
int m_ddd;
} objD;
class AAA* pa = objA;
class BBB* pb = objB;
class CCC* pc = objC;
class DDD* pd = objD;
"(AAA*)pa" …使用可能
"(BBB*)pb" …使用可能
"(AAA*)pb" …使用可能
"(CCC*)pc" …使用可能
"(AAA*)pc" …pcの指すアドレスを型AAAの先頭アドレスとみなしてキャスト
プログラミング上のキャストイメージ:(AAA*)((void*)pc)
"(AAA*)pd" …pdの指すアドレスを型AAAの先頭アドレスとみなしてキャスト
プログラミング上のキャストイメージ:(AAA*)((void*)pd)
|
注意 7. | ウォッチ パネルで0x10000を超えるサイズの変数は値,型,アドレスが「?」表示になります。 |