デバッガー変数の値を設定します。
variable |
設定する変数。 variable がドル記号 ($) で始まる場合は、事前に定義されたレジスター名またはデバッガー変数のいずれか、事前に定義された変数またはユーザー変数のいずれかです。 variable がドル記号 ($) で始まらない場合は、プログラムの変数です。 |
expression |
変数の値。 |
このコマンドは、デバッガー変数、メモリーアドレス、または言語のスコープと可視化規則に従ってアクセス可能な式の値を設定します。expression は、現在のコンテキストで有効な任意の式です。
set variable コマンドは、指定した式を評価します。式に代入演算子 (=) が含まれる場合、式のすべての演算子で評価されるように、デバッガーは式を評価し、新しい値を代入します。set variable コマンドと print コマンドの唯一の違いは、set variable は何も出力しないのに対し、print は新しい値を代入し、変数の新しい値を表示することです。
expression を指定しない場合、デバッガー変数は void に設定され、一方プログラム変数は変更されません。
expression の開始がデバッガーにとってあいまいな場合は、variable キーワードを省略することができます。例えば、expression が文字列 height で始まる場合、デバッガーはコマンドを set height コマンドとして解釈します。
C++ の場合、set variable コマンドを使用して、クラス内のスタティック・データ・メンバーとオブジェクト・データ・メンバー、参照型、const 型、static 型として宣言された変数を変更します。参照型によって参照されたアドレスを変更することはできませんが、アドレスの値を変更することはできます。
set variable コマンドを使用して PC を変更しないでください。PC の変更時にレジスターの内容やメモリーは調整されません。ほとんどの命令が、アプリケーションの意味に影響を与える方法でレジスターやメモリーを変更するため、PC の変更によりアプリケーションで計算が正しく行われず、誤った回答を算出する可能性が高くなります。PC の値を変更した結果、アクセス違反やその他のエラーおよびシグナルが生じることがあります。
次の例は、値 5 を C++ オブジェクトのデータメンバー _data に設定する方法を示しています。
(idb) print node->_data $2 = 2 (idb) set variable node->_data = 5 (idb) print node->_data $3 = 5
次の例は、変数に関連付けられている値と、式に関連付けられている値を変更する方法を示しています。
(idb) print *node $6 = {<IntNode> = {<Node> = {_nextNode = 0x0}, _data = 5}, _fdata = 12.345} (idb) set variable node->_data = -32 (idb) set variable node->_fdata = 3.14 * 4.5 (idb) set variable node->_nextNode = _firstNode (idb) print *node $7 = {<IntNode> = {<Node> = {_nextNode = 0x805c4e8}, _data = -32}, _fdata = 14.13}
次の例のように、set variable コマンドを使用して、アドレスで指定したメモリー内容を変更することができます。
(idb) set variable $address = &(node->_data) (idb) print $address $11 = (int *) 0x805c500 (idb) print *(int *)($address) $12 = -32 (idb) set variable *(int *)($address) = 1024 (idb) print *(int *)($address) $13 = 1024