指定した式がゼロでなければコマンドリストを実行します。
expr |
while-loop を制御する条件式。 |
commands |
実行される 1 つまたは複数のデバッガーコマンドあるいはプログラム的な式。 GDB モード: 1 行につき 1 コマンドを入力します。 IDB モード: セミコロン (;) でコマンドを区切ります。 |
デバッガーは、expr が非ゼロの値に評価される限り、cmdlist のコマンドを実行します。
これは、現在の言語に従って行う true または false のテストとは異なります。例えば、現在の言語が Fortran で式が 2 を評価した場合、Fortran では 2 は .FALSE. ですが、2 は非ゼロのため、while は続けられます。
while コマンドの本文に continue コマンド、step コマンド、next コマンドを配置することはできますが、これは混乱を招く恐れがあるので注意してください。例えば、while コマンドの本文内でアプリケーション実行の継続中にブレークポイントがトリガーされることがあります。
GDB モード:このコマンドは、コマンドライン・モードでデバッガーを使用する場合のみ適用されます。GUI の [Console (コンソール)] ウィンドウを使用する場合は効果はありません。
GDB モード:
(idb) set $loop = 5 (idb) while $loop > 0 >output "$loop is " >output $loop >echo \n >set $loop = $loop - 1 >end $loop is 5 $loop is 4 $loop is 3 $loop is 2 $loop is 1
IDB モード:
(idb)
while $loop > 0 { p $loop; set $loop = $loop - 1}
5
4
3
2
1
(idb)次の例は、while の本文内でアプリケーション実行の継続が含まれる、より複雑な while コマンドの使用方法を示しています。
IDB モード:
(idb) run The list is: [1] stopped at [void List<Node>::print(void) const:167 0x0804af2e] 167 cout << "Node " << i ; (idb) (idb) while (currentNode->_data != 5) { print "currentNode->_data is ", currentNode->_data; cont } currentNode->_data is 1 Node 1 type is integer, value is 1 [1] stopped at [void List<Node>::print(void) const:167 0x0804af2e] 167 cout << "Node " << i ; currentNode->_data is 2 Node 2 type is compound, value is 12.345 parent type is integer, value is 2 [1] stopped at [void List<Node>::print(void) const:167 0x0804af2e] 167 cout << "Node " << i ; currentNode->_data is 7 Node 3 type is compound, value is 3.1415 parent type is integer, value is 7 [1] stopped at [void List<Node>::print(void) const:167 0x0804af2e] 167 cout << "Node " << i ; currentNode->_data is 3 Node 4 type is integer, value is 3 [1] stopped at [void List<Node>::print(void) const:167 0x0804af2e] 167 cout << "Node " << i ; currentNode->_data is 4 Node 5 type is integer, value is 4 [1] stopped at [void List<Node>::print(void) const:167 0x0804af2e] 167 cout << "Node " << i ; (idb) (idb) print currentNode->_data 5