デバッガ dbx の使い方.

Slides:



Advertisements
Similar presentations
システムプログラミング 情報工学科 篠埜 功 情報工学科 3 年生対象 専門科目 第5回 シェルスクリプトの続 き レポート課題 main 関数の引数 usage メッセージ.
Advertisements

プロセスの生成とコマンドの実行 プロセスの生成とコマンドの実行 プロセス生成のシステムコール プロセス生成のシステムコール プロセス生成のプログラム例 プロセス生成のプログラム例 プログラム実行のシステムコール プログラム実行のシステムコール 子プロセスの終了を待つシステムコール 子プロセスの終了を待つシステムコール.
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
システムプログラミング 第10回 情報工学科 篠埜 功. 今回の内容 プロセス(続き) – execve システムコール 現在のプロセスを、引数に与えられたファイル(実行 形式ファイルあるいはシェルスクリプト等の実行可能 なファイル)を受け取り、現在のプログラムをそれで 置き換える(変身)。 fork.
BBT大学 Ruby on Rails開発環境セットアップマニュアル
WinDBG6によるRTX5.5デバッグ RTX開発環境 WinDBG6.0 debugモードで起動 232Cクロスケーブル
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
知識情報演習Ⅲ(後半第5回) 辻 慶太
情報処理演習C2 ファイル操作について (2).
第3回 ファイルとフォルダ 伊藤 高廣 計算機リテラシーM 第3回 ファイルとフォルダ 伊藤 高廣
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
基礎プログラミングおよび演習 第4回 担当:花岡 5階522/520.
CODE::BLOCKSで 無料で簡単 Windowsアプリ開発
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
プログラミング基礎I(再) 山元進.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
第13回 プログラミングⅡ 第13回
第8回 プログラミングⅡ 第8回
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
情報処理Ⅱ 第13回 2006年1月20日(金).
アルゴリズムとデータ構造 補足資料6-3 「サンプルプログラムcat3.c」
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
構造体 構造体, 構造体とポインタの組み合わせ,.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
プログラミング2 関数
B演習(言語処理系演習)第3回 字句解析 田浦.
iioLoadFile()とiioMallocImageBuffer()の補足
iioLoadFile()とiioMallocImageBuffer()の補足
プログラミング 4 記憶の割り付け.
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
画像処理プログラムの説明.
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
コンピュータに計算させる命令を確かめよう!
アルゴリズムとデータ構造勉強会 第6回 スレッド木
演習1の解答例の解説 2004年10月21日 海谷 治彦.
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
演習1の解答例の解説 2006年11月8日 海谷 治彦.
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
UNIX演習 情報ネットワーク特論.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
2005年度 データ構造とアルゴリズム 第6回 「ハッシュ法を用いた探索」
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
オブジェクト指向プログラミングと開発環境
情報工学科 3年生対象 専門科目 システムプログラミング 第4回 シェルスクリプト 情報工学科 篠埜 功.
演習0 func0, func1, func2を作成せよ. main()関数の中で,func0()を呼び出しを実行せよ.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
演習07-0 “Hello\n” “World!\n”と
B演習(言語処理系演習)第2回 田浦.
ファイルの読み込み #!/usr/bin/env perl #Perlスクリプトの指定 open(FILE, "food.txt");
UNIX演習 情報ネットワーク特論資料.
UNIX演習 情報ネットワーク特論資料.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
vc-2. Visual Studio C++ のデバッガー (Visual Studio C++ の実用知識を学ぶシリーズ)
ファイルの読み込み, ファイルからのデータの取り出し, ファイルの書き出し
ネットワーク・プログラミング デバイスドライバと環境変数.
ネットワーク・プログラミング Cプログラミングの基礎.
第5回 プログラミングⅡ 第5回
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
モジュール分割.
pf-2. 条件分岐 (Python プログラミング基礎を演習で学ぶシリーズ)
目的とするユーザーコードを 作成するために
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
情報処理Ⅱ 2005年11月25日(金).
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
●IchigoJamを動かしてみよう 最初の画面が出る 電源スイッチを 左へ キーボードで 文字を打ってみよう.
Presentation transcript:

デバッガ dbx の使い方

デバッガとは プログラムのバグを追跡し,特定し,排除する作業を援助するツール プログラムの動的な性質を明らかにするツール

デバッグの必要性 プログラムは正しくコンパイルできるが,実行結果が正しくない デバッガを使い,正しく動作しない原因を探し,プログラムの変更を行う

dbx の起動 dbx program_name program_nameのプログラムのデバッグを行う 例:CC –g –o sample sample.cc dbx ./sample

基本的なコマンド(1) run runargs <args> runargs stop at <line> プログラムを実行する runargs <args> 実行時の引数を設定する runargs 現在の引数をクリアする stop at <line> 指定した行番号<line>にブレークポイントを設定する stop in <func> 指定した関数<func>をブレークポイントに設定する

基本的なコマンド(2) cont rerun next next <n> ブレークポイントまでプログラムを実行し,停止する プログラムを最初から実行する next プログラム停止状態で次の行を実行する next <n> nextを<n>回繰り返す

基本的なコマンド(3) step step <n> dump print <exp> プログラム停止状態で次の行を実行する 次の行が関数なら,その関数に入る step <n> stepを<n>回繰り返す dump 現在の関数の全てのローカル変数を表示する print <exp> <exp>の値を表示する

基本的なコマンド(4) up up <n> down down <n> 1つ上の関数に移動 1つ下の関数に移動 down <n> <n>個下の関数に移動

dbx の使い方(1) コンパイル デバッガの起動 実行ファイルと引数の確認 引数の設定 デバッグを行うときに,-gオプションを付けてコンパイルを行う デバッガの起動 dbx ./TPCBenchmark 実行ファイルと引数の確認 (dbx) debug Debugging: TPCBenchmark Debugging: プログラム名 第1引数 第2引数 ・・・ というように表示される この例では,引数は設定されていない 引数の設定 (dbx) runargs kei ../tpc-c/tpc.config.3000 0 1 3000 1 runargs 第1引数 第2引数 ・・・というように入力する

dbx の使い方(2) 実行ファイルと引数の確認 ブレークポイントの設定 プログラムの実行 (dbx) debug Debuggin: TPCBenchmark kei ../tpc-c/tpc.config.3000 0 1 3000 1 引数が設定されていることがわかる ブレークポイントの設定 (dbx) stop in main (2) stop in main main関数に入ったところでプログラムが停止するように設定 プログラムの実行 (dbx) run stopped in main at line 33 in file “TPCBenchmark.cc” 33 if(argc != 7){ プログラムを実行し,最初のブレークポイントであるmain関数に入ったところで停止する

dbx の使い方(3) ローカル変数の表示 (dbx) dump argv = 0xffffffff7ffff538 rb = 0 mpl = 0 set_timer_request_1_arg = 2147478097 open_flag = 0 new_order_tp = -1 part_name = "" payment_tp = 0 heap_reg_arg = STRUCT result = (nil) host = (nil) arg = STRUCT

dbx の使い方(4) 指定した変数の表示 argc = 7 stock_level_tp = 0 order_status_tp = 0 delivery_tp = 0 clnt = (nil) result_info = 0x1000551cc main関数で使われている変数名と値が表示される 指定した変数の表示 (dbx) print argv[1] argv[1] = 0xffffffff7ffff859 “kei” argv[1]の値を表示 指定した変数がポインタなので,ポインタの中身も表示される

dbx の使い方(5) プログラムの表示 (dbx) list 33 if(argc != 7){ 34 fprintf(stderr, "Usage: %s host_name configure_name database_open period transaction_number mpl\n", argv[0]); 35 exit(0); 36 } 37 char* host = argv[1]; 38 // Create RPC Client 39 CLIENT* clnt; 40 clnt = clnt_create(host, SERVERPROG, SERVERVERS, "tcp"); 41 if (clnt == (CLIENT *) NULL) { 42 clnt_pcreateerror(host); 現在停止している場所からプログラムが10行表示される

dbx の使い方(6) 次の行を実行 hostに値が格納されることを確認する (dbx) next stopped in main at line 37 in file “TPCBenchmark.cc” 37 char* host = argv[1] プログラムを1行実行して,停止する hostに値が格納されることを確認する (dbx) print host host = (nil) stopped in main at line 40 in file “TPCBenchmark.cc” 40 clnt = clnt_create(host, SERVERPROG, SERVERVERS, "tcp"); host = 0xffffffff7ffff859 “kei” hostの値が(nil)から0xffffffff7ffff859に変わっている

dbx の使い方(7) 指定した行をブレークポイントに設定する ブレークポイントまで実行する ブレークポイントの確認 (dbx) stop at 53 (3) stop at “TPCBenchmark.cc”:53 TPCBenchmark.ccの53行目がブレークポイントに設定される ブレークポイントまで実行する (dbx) cont stopped in main at line 53 in file “TPCBenchmark.cc” 53 LoadEnv(argv[2]); 53行目をブレークポイントに設定していたので,53行目で停止 ブレークポイントの確認 (dbx) status (2) stop in main *(3) stop at “TPCBenchmark.cc”:53 現在設定されているブレークポイントが表示される *がついている場所が現在停止している場所

dbx の使い方(8) ブレークポイントの削除 関数の中に入る (dbx) clear “TPCBenchmark.cc”:53 cleared (3) stop at “TPCBenchmark.cc”:53 (dbx) status (2) stop in main ブレークポイントが削除されたことが確認できる 関数の中に入る (dbx) step stopped in LoadEnv at line 112 in file “TPCBenchLib.cc” 112 SetParams(database_config_name); 関数(LoadEnv)の中に入り,停止

dbx の使い方(9) プログラムの停止している場所を表示 (dbx) step stopped in SetParams at line 62 in file “SetParams.cc” 62 tpcdbname = new char[40]; 関数(SetParams)の中に入り,停止 プログラムの停止している場所を表示 (dbx) where current thread: t@1 =>[1] SetParams(configFileName = 0xffffffff7ffff85d "../tpc-c/tpc.config.3000"), line 62 in "SetParams.cc" [2] LoadEnv(database_config_name = 0xffffffff7ffff85d "../tpc-c/tpc.config.3000"), line 112 in "TPCBenchLib.cc" [3] main(argc = 7, argv = 0xffffffff7ffff538), line 53 in "TPCBenchmark.cc“ 関数名(引数リスト), line 行番号 in “ファイル名”と表示される 矢印のついてる場所[1]が現在停止している場所

dbx の使い方(10) 現在の関数(SetParams)から抜ける 変数のタイプを調べる (dbx) stop at “TPCBenchLib.cc”:113 (4) stop at “TPCBenchLib.cc”:113 SetParamsを呼び出したプログラムの次の行をブレークポイントに設定 (dbx) cont stopped in LoadEnv at line 113 in file “TPCBenchLib.cc” 113 } SetParamsが実行され,プログラムが停止 変数のタイプを調べる (dbx) whatis database_config_name char *database_config_name; database_config_nameはchar型のポインタである

dbx の使い方(11) プログラムを最後まで実行する (dbx) cont MQTH = 701 (701, 649, 74, 65, 69) Rollback = 0 execution completed, exit code is 0 プログラムの実行結果が出力され,正しく終了したことを示す