コールスタックからフレームを削除します。
return を使用すると、選択したスタックフレームとその中のすべてのフレームが破棄されます。実行している関数とすべての子関数はもはや呼び出されず、実行を停止します。
return コマンドは、実行を再開しません。関数が戻った状態でプログラムを停止したままにします。対照的に、finish コマンドは選択したスタックフレームが自然に戻るまで実行を再開します。
hello_simple.: のコードの行 5-18 を例に考えます。
5 static volatile int bar = 0;
6
7 static void readGlob( int x )
8 {
9 bar = 100;
10 foo = x;
11 bar = 200;
12 }
13
14 int main()
15 {
16 int j = 10;
17 readGlob(5);
18 j = bar;
アプリケーションは行 17 の readGlob() の呼び出しを実行して、関数 readGlob() 内部の行 10 の先頭に位置しています。 return コマンドは、デバッガーが行 11 の bar = 200 を実行する前に、readGlob() を終了してスタックからフレームを削除します。
アプリケーションは readGlob() から正常に戻ったかのように行 18 で停止します。
デバッガーは行 9 を実行した後、行 11 を実行する前に return コマンドを実行したため、行 18 の bar の値は (200 ではなく) 100 です。
Breakpoint 1, readGlob (x=1111) at /hello_simple.c:10 10 foo = x; (idb) p bar $1 = 100 (idb) return Make readGlob return now? (y or n) y #0 0x08048402 in main () at /hello_simple.c:18 18 j = bar; (idb) p bar $2 = 100