2.21.1 入力規約

各パネル/ダイアログへの入力規約を次に示します。

(1)

文字セット

入力を許可している文字セットは次のとおりです。

表 2.26

文字セットの一覧

文字セット

概要

ASCII

半角のアルファベット(英字),半角の数字,および半角の記号

Shift-JIS

全角のアルファベット(英字),全角の数字,全角の記号,ひらがな,全角のカタカナ,漢字,および半角のカタカナ

EUC-JP

全角のアルファベット(英字),全角の数字,全角の記号,ひらがな,全角のカタカナ,漢字,および半角のカタカナ

UTF-8

全角のアルファベット(英字),全角の数字,全角の記号,ひらがな,全角のカタカナ,漢字(中国語を含む),および半角のカタカナ

UTF-16 (Unicode)

全角のアルファベット(英字),全角の数字,全角の記号,ひらがな,全角のカタカナ,漢字(中国語を含む),および半角のカタカナ

(2)

エスケープ・シーケンス

入力を許可しているエスケープ・シーケンスは次のとおりです。

表 2.27

エスケープ・シーケンスの一覧

エスケープ・シーケンス

意味

\0

0x00

null文字

\a

0x07

アラート

\b

0x08

バックスペース

\t

0x09

水平タブ

\n

0x0A

改行

\v

0x0B

垂直タブ

\f

0x0C

フォーム・フィード

\r

0x0D

キャリッジ・リターン

\"

0x22

ダブルクォーテーション

\'

0x27

シングルクォーテーション

\?

0x3F

疑問符

? と入力された場合も疑問符として扱います。

\\

0x5C

バックスラッシュ

(3)

数  値

数値を入力する際に許可している進数は次のとおりです。

表 2.28

進数の一覧

進数表記

概要

2進数

0bで始まり,0〜1の数値が続く数値

(英字の大文字/小文字については,不問)

8進数

0で始まり,0〜7の数字が続く数値

10進数

0以外で始まり,0〜9の数字が続く数値

16進数

0xで始まり,0〜9の数字,およびa〜fの英字が続く数値

(英字の大文字/小文字については,不問)

ただし, マークが表示されている入力エリアでは,0xの接頭辞は必要ありません。

(4)

式と演算子

式とは,定数,CPUレジスタ名,I/Oレジスタ名,シンボル,およびこれらを演算子で結合したものを示します。

式には,アドレス式とウォッチ式があります。シンボルのアドレスを必要とする式をアドレス式,シンボルの値を必要とする式をウォッチ式と呼びます。

(a)

アドレス式と演算子

アドレス式では,シンボルのアドレスを使用して演算します。CPUレジスタ名が記述された場合のみ,値を使用して演算します。

アドレス式の基本入力形式は次のとおりです。

表 2.29

アドレス式の基本入力形式

説明

C/C++言語変数名注1,注2

C/C++言語の変数のアドレス

[式 注3]

配列のアドレス

.メンバ名注4

構造体/共用体/クラスのメンバのアドレス

->メンバ名注4

ポインタの指し示す構造体/共用体/クラスのメンバのアドレス

ウォッチ式.*キャスト式

メンバ変数へのポインタのアドレス

ウォッチ式->*キャスト式

メンバ変数へのポインタのアドレス

CPU レジスタ名

CPU レジスタの値

I/Oレジスタ名

I/Oレジスタのアドレス

ラベル名注5,EQUシンボル名注5,[即値]

ラベルのアドレス,EQUシンボルの値,即値アドレス

整定数

アドレス

注 1.

C89,C99,C++言語の変数を表します。

注 2.

C言語変数の値がレジスタに割り付いている場合は,エラーになります。

注 3.

インデックスとして入力された式は,ウォッチ式として解析します。

注 4.

基底クラスのメンバ変数を指定する場合,メンバ名の前にスコープを指定してください
(例:variable.BaseClass::member)。

注 5.

ラベル名またはEQUシンボル名に“$”が含まれている場合,名前を“{}”で囲んでください(例:{$Label})。
“I” は虚数のキーワードとなるため,CPUレジスタの“I”を指定する場合は,“:REG”を付加してください(例:I:REG)。

 

また,「表 2.29 アドレス式の基本入力形式」から,次の演算子を用いたアドレス式を構成することができます。

表 2.30

演算子を用いたアドレス式の構成

説明

()

演算順序の指定

-

符号反転

!

論理否定

~

ビット反転

*

乗算

/

除算

%

剰余算

+

加算

-

減算

&

ビットごとの論理積

^

ビットごとの排他的論理和

|

ビットごとの論理和

変数および関数は,変数,関数,整定数以外と演算子で結合することはできません(例:C言語変数名+I/Oレジスタ名)。

(b)

ウォッチ式と演算子

ウォッチ式ではシンボルの値を使用して演算します。値が存在しない場合のみ,シンボルのアドレスを使用して演算します(例:main( ) + 1)。

ウォッチ式の基本入力形式は次のとおりです。

表 2.31

ウォッチ式の基本入力形式

説明

C/C++言語変数名注1

C/C++言語の変数の値

[]

配列の要素値

.メンバ名注2

構造体/共用体/クラスのメンバ値

->メンバ名注2

ポインタの指し示す構造体/共用体/クラスのメンバ値

ウォッチ式.*キャスト式

メンバ変数へのポインタの値

ウォッチ式->*キャスト式

メンバ変数へのポインタの値

*

ポインタの変数の値

&

配置アドレス

CPU レジスタ名

CPU レジスタの値

I/Oレジスタ名

I/Oレジスタの値

ラベル名注3,EQUシンボル名注3,[即値]

ラベルの値,EQUシンボルの値,即値アドレスの値

整定数

整数の定数値

浮動定数

浮動小数点の定数値

文字定数

文字定数値

注 1.

C89,C99,C++言語の変数を表します。

注 2.

基底クラスのメンバ変数を指定する場合,メンバ名の前にスコープを指定してください。
(例:variable.BaseClass::member)

注 3.

ラベル名またはEQUシンボル名に“$”が含まれている場合,名前を“{}”で囲んでください(例:{$Label})。
虚数の値には,大文字の“I”を掛けてください(例:1.0 + 2.0*I)。“I” は虚数のキーワードとなるため,CPUレジスタの“I”を指定する場合は,“:REG”を付加してください(例:I:REG)。

 

また,「表 2.31 ウォッチ式の基本入力形式」から,次の演算子を用いたウォッチ式を構成することができます。次表の演算子は,C言語仕様に従って式を解析します。

表 2.32

演算子を用いたウォッチ式の構成

説明

()

演算順序の指定

!

論理否定

~式

ビット反転

*

乗算

/

除算

%

剰余算

+

加算

-

減算

&

ビットごとの論理積

^

ビットごとの排他的論理和

|

ビットごとの論理和

変数および関数は,変数,関数,整定数以外と演算子で結合することはできません(例:C言語変数名+I/Oレジスタ名)。

注意 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 AAA* pa = objA;
class BBB* pb = objB;
class CCC* pc = objC;
 
"(AAA*)pa" …使用可能
"(BBB*)pb" …使用可能
"(AAA*)pb" …使用可能
"(CCC*)pc" …使用可能
"(AAA*)pc" …pcの指すアドレスを型AAAの先頭アドレスとみなしてキャスト
プログラミング上のキャストイメージ:(AAA*)((void*)pc)

注意 7.

ウォッチ パネルで0x10000を超えるサイズの変数は値,型,アドレスが「?」表示になります。