gbdデバッグまとめ
2916 ワード
gdbデバッグ
http://blog.csdn.net/lwbeyond/article/details/7839225
一般的な基本コマンド
fileロードデバッグ待ちファイルrun next step breakpoint print
アウトライン
入力制御
運転制御
割り込み制御(2点)
コードを表示
変数情報を表示する(点)
関数を呼び出す
呼び出しスタックを表示
入力制御
たまにエラーが発生します.デバッグが必要ですが、デバッグ中に多くのデータを入力するにはどうすればいいですか?リダイレクトが使えます.プログラムの実行開始時(sまたはr)リダイレクト入出力が可能です.
——start(s)
main関数まで実行
——run(r)
実行
——continue(c)
次の電源が切れるまで運転します.
——finish(f)
関数からジャンプしてゲームを実行したら自動停止します.
——next(n)
次のステートメント
——ステップ(s)
シングルステップデバッグ入力関数
——until
サイクル終了後に自動停止します.
割り込み制御
ブレークポイントとは、プログラムが実行される行コードがトリガーとなり、観測点はプログラムがメモリユニットにアクセスする時にトリガとなります.
——breakpoint(b)ブレークポイント
b n b関数名b n(関数名)if条件
——ウォッチの観察点
watch変数名は、プログラムが変数名で指定されたメモリユニットにアクセスすると、プログラムを停止します.
コードを表示
——print(p)プリント
必要な時は変数の値を見てください.
——display(disp)自動表示
一旦プログラムが停止したら(電源が切れるか、またはシングルステップで)変数の値を見てください.
——ウォッチの観察点
この変数にアクセスすると、変数の値を見ます.
——whatis変数の種類を調べます.
——特に、配列の値を表示します.
一連のメモリ空間の値を表示します.配列の一部や、動的に割り当てられたデータの大きさなどです.GDBの「@」オペレータを使ってもいいです.「@」の左は最初のメモリのアドレスの値です.「@」の右側にメモリの長さを確認したいです.例えば、あなたのプログラムにはこのような文があります.
プログラム情報infoを表示する
——info args現在のパラメータ
現在の関数のパラメータ名とその値を印刷します.
——info locarsローカル変数
現在の関数のすべての局所変数とその値を印刷します.
——info breakブレークポイント
ブレークポイント情報を表示します.
——infoウォッチポイント観察点
現在設定されているすべての観測点を一覧表示します.
——info display自動表示点
——info stackスタックの情報を確認する
——info frameより詳細なスタックアドレス情報
関数を呼び出す
——コール
直接call function(arg...)で結果が確認できます.
スタックの情報を表示
——backtrace(bt)呼び出しスタックを確認する
関数コールスタックを表示
関数を呼び出す情報を表示します.
——フレームはスタックの詳細を確認します.
数字nをスタックの階層に追加し、他のコマンド(info)でこのレベルの変数情報を見ることができます.
三点の管理
——観察点と断点の管理
断点と観察点はinfo breakで見られます.番号は同時にdisable num enable num delete num(numはポイントの番号です.)disableとenalbeを管理します.自動表示の設定は削除しません.無効と回復させるだけです.
clear listuinsert/削除関数のすべてのブレークポイントclear list.c:listudeet/削除ファイル:関数のすべてのブレークポイントclear 12/削除行番号のすべてのブレークポイントclear list.c:12/削除ファイル:行番号のすべてのブレークポイント
——ポイントの自動表示
自動表示ポイントはinfo displayで見られます.disable diapplay//enable diapplayを閉じる/delete diappyを開く/削除します.
特有の操作undisplay/自動表示ポイント削除/効果はdeleteに相当します.
http://blog.csdn.net/lwbeyond/article/details/7839225
一般的な基本コマンド
fileロードデバッグ待ちファイルrun next step breakpoint print
アウトライン
入力制御
運転制御
割り込み制御(2点)
コードを表示
変数情報を表示する(点)
関数を呼び出す
呼び出しスタックを表示
入力制御
たまにエラーが発生します.デバッグが必要ですが、デバッグ中に多くのデータを入力するにはどうすればいいですか?リダイレクトが使えます.プログラムの実行開始時(sまたはr)リダイレクト入出力が可能です.
(gdb)r < test.in
運転制御——start(s)
main関数まで実行
——run(r)
実行
——continue(c)
次の電源が切れるまで運転します.
——finish(f)
関数からジャンプしてゲームを実行したら自動停止します.
——next(n)
次のステートメント
——ステップ(s)
シングルステップデバッグ入力関数
——until
サイクル終了後に自動停止します.
割り込み制御
ブレークポイントとは、プログラムが実行される行コードがトリガーとなり、観測点はプログラムがメモリユニットにアクセスする時にトリガとなります.
——breakpoint(b)ブレークポイント
b n b関数名b n(関数名)if条件
——ウォッチの観察点
watch変数名は、プログラムが変数名で指定されたメモリユニットにアクセスすると、プログラムを停止します.
コードを表示
// list 10
(gdb) list
// line1 line2
(gdb) list line1, line2
// n 10
(gdb) list n
// function 10
(gdb) list function
変数情報を表示——print(p)プリント
必要な時は変数の値を見てください.
——display(disp)自動表示
一旦プログラムが停止したら(電源が切れるか、またはシングルステップで)変数の値を見てください.
——ウォッチの観察点
この変数にアクセスすると、変数の値を見ます.
——whatis変数の種類を調べます.
——特に、配列の値を表示します.
一連のメモリ空間の値を表示します.配列の一部や、動的に割り当てられたデータの大きさなどです.GDBの「@」オペレータを使ってもいいです.「@」の左は最初のメモリのアドレスの値です.「@」の右側にメモリの長さを確認したいです.例えば、あなたのプログラムにはこのような文があります.
int *array = (int *) malloc (len * sizeof (int));
です.そこで、GDBのデバッグ中に、次のコマンドでこのダイナミック配列の値を表示できます.p*array@len プログラム情報infoを表示する
——info args現在のパラメータ
現在の関数のパラメータ名とその値を印刷します.
——info locarsローカル変数
現在の関数のすべての局所変数とその値を印刷します.
——info breakブレークポイント
ブレークポイント情報を表示します.
——infoウォッチポイント観察点
現在設定されているすべての観測点を一覧表示します.
——info display自動表示点
——info stackスタックの情報を確認する
——info frameより詳細なスタックアドレス情報
関数を呼び出す
——コール
直接call function(arg...)で結果が確認できます.
スタックの情報を表示
——backtrace(bt)呼び出しスタックを確認する
関数コールスタックを表示
関数を呼び出す情報を表示します.
——フレームはスタックの詳細を確認します.
数字nをスタックの階層に追加し、他のコマンド(info)でこのレベルの変数情報を見ることができます.
三点の管理
——観察点と断点の管理
断点と観察点はinfo breakで見られます.番号は同時にdisable num enable num delete num(numはポイントの番号です.)disableとenalbeを管理します.自動表示の設定は削除しません.無効と回復させるだけです.
clear listuinsert/削除関数のすべてのブレークポイントclear list.c:listudeet/削除ファイル:関数のすべてのブレークポイントclear 12/削除行番号のすべてのブレークポイントclear list.c:12/削除ファイル:行番号のすべてのブレークポイント
——ポイントの自動表示
自動表示ポイントはinfo displayで見られます.disable diapplay//enable diapplayを閉じる/delete diappyを開く/削除します.
特有の操作undisplay/自動表示ポイント削除/効果はdeleteに相当します.