SlideShare ist ein Scribd-Unternehmen logo
1 von 41
Downloaden Sie, um offline zu lesen
Debug Hacks
            8/11/'11

よしおかひろたか (Debug Hacks 著者 )
        hyoshiok@gmail.com
 http://d.hatena.ne.jp/hyoshiok/
         twitter @hyoshiok
Debug Hacks

    ●   Debug Hacks --
        デバッグを極めるテク
        ニック & ツール
    ●   吉岡 弘隆 , 大和 一洋 ,
        大岩 尚宏 , 安部 東洋 ,
        吉田 俊輔
    ●   ISBN:978-4-87311-404-0
    ●   オライリー・ジャパン
    ●   2009 年 4 月 22 日
デバッグ入門

●   デバッグとは、ソフトウェアの不具合(バグ)
    を修正するプロセス
●   ソフトウェアの不具合を発見するプロセスのこ
    とはテストとよぶ
●   ソフトウェアの不具合を修正するのではなく回
    避する方法をトラブルシューティングとよぶ
●   Debug Hacks は主に(狭義の)デバッグについ
    て解説した書籍
トラブルシューティング
バグ

●   ソフトウェアの不具合(仕様との差異)
    –   テストで発見する
    –   それ以外で発見される
        ●   たまたま使っていて発見、…
バグのパターン

●   正常に終了(バグではない)
●   期待する動作をしないで終了
    –   期待する出力をしない、クラッシュ、遅い、
●   終了しない
    –   デッドロック、無限ループ、
デバッグのプロセス
●   問題の再現
    –   環境設定
    –   ヒアリング
●   現象の確認
●   問題の理解、解析
●   原因が不明?
    –   過去にあった同様の問題を検索(バグ DB など)
    –   バグ発生へ、そなえる
    –   同僚に説明する
    –   コミュニティへ質問する
デバッグのプロセス
●   バグ修正
●   動作確認
    –   バグが直っていることの確認
    –   デグレード/エンバグがないことの確認
        (リグレッションテストの実行)
●   ピアレビュー
●   テストプログラムの作成
●   コミュニティへの報告(必要であれば)
デバッガを使おう
●   任意の場所にブレークポイントを設定できる。
●   プログラムを変更しなくても、変数の値を確認
    することができる。
●   プログラムを変更しなくても、変数に任意の値
    を設定できる。
●   変数に値が代入されたときに停止することがで
    きる。
●   コールグラフ(バックトレース)を表示でき
    る。
●   printf() デバッグださいよね。
デバッグのプロセス

●   期待しない値を出力して終了というケース
    –   任意の場所にブレークポイントを設定
    –   実行
    –   任意の変数の値を確認(期待通りか)
        ●   期待通りじゃない場合は、実行前半部分にバグ?
        ●   期待通りの場合は、実行後半にバグ?
●   終了しないケースは後述
GDB の基礎の基礎

●   Gcc でコンパイルする
     $gcc -g -Wall
    -Wall はとっても重要
    その他、下記のフラグも
    -W -Wformat=2 -Wcast-qual -Wcast-align
    -Wwrite-strings -Wconversion -Wfloat-equal
    -Wpointer-arith
●   Makefile では CFLAGS にオプションを追加
●   INSTALL や README ファイルなどを確認
GDB の基礎の基礎

●   起動
●   $gdb 実行ファイル名
●   $gdb -c コアファイル 実行ファイル名
●   emacs から起動するときは、 M-x gdb
GDB の基礎の基礎

●   ブレークポイントの設定
    –   任意の場所で停止する
●   break 関数名
●   break 行番号
●   break ファイル名:行番号
●   break ファイル名:関数名
●   break [+|-] オフセット
●   break * アドレス
ブレークポイント

●   設定したブレークポイントの確認
    info break
実行

●   run コマンド
●   run 引数
●   main() にブレークポイントを設定して main()
    まで実行する
    –   start コマンド
ブレークしたら

●   どこで停止したか。
    backtrace コマンド (bt と略す )
変数の表示

●   print[/ フォーマット ] 変数
    –   `x'   16 進数で表示
    –   `d'   10 進数で表示
    –   `u'   符号なしの 10 進数で表示
    –   `o'   8 進数で表示
    –   `t'   2 進数で表示。 `t' は "two" からくる。
    –   `a'   アドレス
    –   `c'   文字 (ASCII) として表示
    –   `f'   浮動小数点
    –   `s'   文字列として表示
アドレスの表示

●   x[/NFU] アドレス
●   N 繰り返し回数
●   F フォーマット
●   U 単位
    –   `b'   バイト
    –   `h'   ハーフバイト( 2 バイト)
    –   `w'   ワード( 4 バイト) デフォルト
    –   `g'   ジャイアントバイト (8 バイト)
逆アセンブル

●   disassemble コマンド
実行の再開

●   ステップ実行
●   continue
●   finish/until
ステップ実行

●   ソースコード一行分実行する
●   next
    –   ソースコード一行分実行し停止する。関数呼び出し
        の場合、関数を実行後停止する。
●   step
    –   ソースコード一行分実行し停止する。関数呼び出し
        の場合、その関数の最初の実行文を実行し停止す
        る。(もぐって行く)
continue

●   実行を再開する
    –   ブレークポイントで停止する
    –   実行を終了する
finish/until

●   finish 関数を最後まで実行
    –   関数の入り口でいろいろ調べた後、最後まで一気に
        実行したいとき便利
●   until ループが終わるまで実行
    –   ループの入り口でいろいろ調べた後、ループを一気
        に実行したいとき便利
実行の再開のまとめ

●   next/step
●   continue
●   finish/until
変数へ代入されたとき止めたい

●   ウォッチポイント。任意の変数に代入された時
    に停止する。
●   watch 式(式が変更された時に停止)
●   awatch 式(式が参照、変更された時に停止)
●   rwatch 式(式が参照された時に停止)
●   どこであるアドレスが変更されるか、よく分か
    らないときなどに利用すると便利。実行速度の
    低下がある。
その他のブレークポイント

●   ハードウェアブレークポイント (hbreak)
●   一時ブレークポイント (tbreak)
変数の値の変更

●   set variable 変数 = 式
●   ソースコードを変更する前に試行錯誤して確認
    できる。
その他のコマンド
●   info threads
●   thread
●   info registers
●   frame
期待しない値のケースのまとめ

●   任意の場所にブレークポイントを設定
●   実行開始
●   停止したら値の確認
●   実行の再開
●   バグの原因を見つけるまで上記を繰り返す
終了しない場合

●   無限ループ、デッドロックなどで終了しない場
    合のデバッグ
●   当該プロセスのプロセス ID を調べる
    $ ps aux|grep プログラム名
●   プロセスへアタッチする
●   attach プロセス ID
●   アタッチすると実行を停止するので、デバッグ
    をはじめる
コアファイルがある場合

●   $gdb -c コアファイル プログラム名
●   コアファイルを生成した時点でのスタックト
    レースなどが見れる
まとめ

●   GDB の基本の基本を紹介した
●   GDB は便利な機能満載なので使ってみよう
●   Debug Hacks の感想、コメント、誤植の発見な
    どなど、著者 (hyoshiok@gmail.com) まで教え
    てください。
付録: Debug Tools

●   kprobes
●   jprobes
●   KAHO
●   systemtap
●   VMware Vprobe
●   crash
●   gdb
kprobes

●   任意のアドレスにプローブを挿入
●   Debug Hacks, #47, #49, #50
jprobes

●   関数の先頭にプローブを設定することに特化し
    ているので、 kprobes よりもお手軽
●   Debug Hacks, #48
KAHO

●   プロセスの関数を置き換えることができる
●   Debug Hacks, #51
systemtap

●   kprobes を利用して、独自のスクリプト言語を
    用いてプローブハンドラを作成する。
●   Debug Hacks, #52, #53
VMware Vprobe

●   ゲスト OS の状態を調査することができる
●   Debug Hacks, #61
crash

●   kernel crash dump utility
●   Debug Hacks, #21
gdb

●   デバッガー
●   Debug Hacks, #5, #6, #7
参考文献
●   Intel® 64 and IA-32 Architectures Software
    Developer's Manuals
    http://www.intel.com/products/processor/manuals/index.htm

Weitere ähnliche Inhalte

Was ist angesagt?

Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp CodereadingHiro Yoshioka
 
Groovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugGroovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugkyon mm
 
Functions
FunctionsFunctions
Functionsdo_aki
 
Node.js Error & Debug Leveling
Node.js Error & Debug LevelingNode.js Error & Debug Leveling
Node.js Error & Debug Levelingkumatch kumatch
 
第一回サーバー勉強友の会
第一回サーバー勉強友の会第一回サーバー勉強友の会
第一回サーバー勉強友の会Takahashi Tomohiko
 
Closures and methodMissing are real
Closures and methodMissing are realClosures and methodMissing are real
Closures and methodMissing are realTakahiro Sugiura
 
第二回サーバー勉強友の会
第二回サーバー勉強友の会第二回サーバー勉強友の会
第二回サーバー勉強友の会Takahashi Tomohiko
 
YAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaXYAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaXKazuyuki Todo
 
Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005gotohayato
 
Predefを使ったsqlのトレース
Predefを使ったsqlのトレースPredefを使ったsqlのトレース
Predefを使ったsqlのトレース悠滋 山本
 
道具を磨き続ける
道具を磨き続ける道具を磨き続ける
道具を磨き続けるTakuya Fujimura
 
サイ本読書会4章変数
サイ本読書会4章変数サイ本読書会4章変数
サイ本読書会4章変数ztyper
 
Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法yhara
 
マークアップ会議 PHP資料
マークアップ会議 PHP資料マークアップ会議 PHP資料
マークアップ会議 PHP資料Wataru Kashii
 
About func unit
About func unitAbout func unit
About func unitgray Space
 
WordPress のための PHP 超入門
WordPress のための PHP 超入門WordPress のための PHP 超入門
WordPress のための PHP 超入門Michinari Odajima
 
JavaScript And Debug
JavaScript And DebugJavaScript And Debug
JavaScript And Debuguupaa
 
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!仕事でも Groovy を使おう!
仕事でも Groovy を使おう!Oda Shinsuke
 

Was ist angesagt? (20)

Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
Groovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugGroovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjug
 
Functions
FunctionsFunctions
Functions
 
Node.js Error & Debug Leveling
Node.js Error & Debug LevelingNode.js Error & Debug Leveling
Node.js Error & Debug Leveling
 
第一回サーバー勉強友の会
第一回サーバー勉強友の会第一回サーバー勉強友の会
第一回サーバー勉強友の会
 
Closures and methodMissing are real
Closures and methodMissing are realClosures and methodMissing are real
Closures and methodMissing are real
 
第二回サーバー勉強友の会
第二回サーバー勉強友の会第二回サーバー勉強友の会
第二回サーバー勉強友の会
 
YAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaXYAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaX
 
Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005
 
Predefを使ったsqlのトレース
Predefを使ったsqlのトレースPredefを使ったsqlのトレース
Predefを使ったsqlのトレース
 
道具を磨き続ける
道具を磨き続ける道具を磨き続ける
道具を磨き続ける
 
サイ本読書会4章変数
サイ本読書会4章変数サイ本読書会4章変数
サイ本読書会4章変数
 
Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法
 
マークアップ会議 PHP資料
マークアップ会議 PHP資料マークアップ会議 PHP資料
マークアップ会議 PHP資料
 
About func unit
About func unitAbout func unit
About func unit
 
WordPress のための PHP 超入門
WordPress のための PHP 超入門WordPress のための PHP 超入門
WordPress のための PHP 超入門
 
JavaScript And Debug
JavaScript And DebugJavaScript And Debug
JavaScript And Debug
 
mq 使ってみたよ
mq 使ってみたよmq 使ってみたよ
mq 使ってみたよ
 
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!仕事でも Groovy を使おう!
仕事でも Groovy を使おう!
 
phpext-2-takagi
phpext-2-takagiphpext-2-takagi
phpext-2-takagi
 

Andere mochten auch

Techno TUT Lecture(scale)
Techno TUT Lecture(scale)Techno TUT Lecture(scale)
Techno TUT Lecture(scale)NU_Pan
 
漢直の世界へようこそ!
漢直の世界へようこそ!漢直の世界へようこそ!
漢直の世界へようこそ!Takafumi Sakakibara
 
TUT-Codeの世界へようこそ!(続・漢直の世界へようこそ)
TUT-Codeの世界へようこそ!(続・漢直の世界へようこそ)TUT-Codeの世界へようこそ!(続・漢直の世界へようこそ)
TUT-Codeの世界へようこそ!(続・漢直の世界へようこそ)Takafumi Sakakibara
 
Techno TUT Lecture(Drums and Basses)
Techno TUT Lecture(Drums and Basses)Techno TUT Lecture(Drums and Basses)
Techno TUT Lecture(Drums and Basses)NU_Pan
 
戦技研 ぷよぷよAI 学生講義
戦技研 ぷよぷよAI 学生講義戦技研 ぷよぷよAI 学生講義
戦技研 ぷよぷよAI 学生講義hisyachu
 
Jet brainsnight resharper全社導入事例
Jet brainsnight resharper全社導入事例Jet brainsnight resharper全社導入事例
Jet brainsnight resharper全社導入事例AkihiroYamamoto
 
VisualStudinoの役に立ちそうな拡張機能をまとめてみた
VisualStudinoの役に立ちそうな拡張機能をまとめてみたVisualStudinoの役に立ちそうな拡張機能をまとめてみた
VisualStudinoの役に立ちそうな拡張機能をまとめてみたytanno
 
Hacker centric culture @devlove 110423
Hacker centric culture @devlove 110423Hacker centric culture @devlove 110423
Hacker centric culture @devlove 110423Hiro Yoshioka
 
How Changing Mobile Technology Is Changing The Way We Create Economy.
How Changing Mobile Technology Is Changing The Way We Create Economy. How Changing Mobile Technology Is Changing The Way We Create Economy.
How Changing Mobile Technology Is Changing The Way We Create Economy. Osaka University
 
kernel code reading party on March 28th, 2014
kernel code reading party on March 28th, 2014kernel code reading party on March 28th, 2014
kernel code reading party on March 28th, 2014Hiro Yoshioka
 
1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng
1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng
1000 Speakers Conference in English, 5th on April 11th, 2014 #1000engHiro Yoshioka
 
対人関係におけるアルコールの効用
対人関係におけるアルコールの効用対人関係におけるアルコールの効用
対人関係におけるアルコールの効用Akiko Kosaka
 
Project Based Learning using by PaaS
Project Based Learning using by PaaSProject Based Learning using by PaaS
Project Based Learning using by PaaSHiro Yoshioka
 
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014Hiro Yoshioka
 

Andere mochten auch (20)

getstartedc#_2
getstartedc#_2getstartedc#_2
getstartedc#_2
 
Techno TUT Lecture(scale)
Techno TUT Lecture(scale)Techno TUT Lecture(scale)
Techno TUT Lecture(scale)
 
Gcdについて?
Gcdについて?Gcdについて?
Gcdについて?
 
Mrsuzuki
MrsuzukiMrsuzuki
Mrsuzuki
 
puyoai
puyoaipuyoai
puyoai
 
漢直の世界へようこそ!
漢直の世界へようこそ!漢直の世界へようこそ!
漢直の世界へようこそ!
 
TUT-Codeの世界へようこそ!(続・漢直の世界へようこそ)
TUT-Codeの世界へようこそ!(続・漢直の世界へようこそ)TUT-Codeの世界へようこそ!(続・漢直の世界へようこそ)
TUT-Codeの世界へようこそ!(続・漢直の世界へようこそ)
 
Techno TUT Lecture(Drums and Basses)
Techno TUT Lecture(Drums and Basses)Techno TUT Lecture(Drums and Basses)
Techno TUT Lecture(Drums and Basses)
 
戦技研 ぷよぷよAI 学生講義
戦技研 ぷよぷよAI 学生講義戦技研 ぷよぷよAI 学生講義
戦技研 ぷよぷよAI 学生講義
 
Jet brainsnight resharper全社導入事例
Jet brainsnight resharper全社導入事例Jet brainsnight resharper全社導入事例
Jet brainsnight resharper全社導入事例
 
Gestão de Projetos 2012 - Módulo 1
Gestão de Projetos 2012 - Módulo 1Gestão de Projetos 2012 - Módulo 1
Gestão de Projetos 2012 - Módulo 1
 
VisualStudinoの役に立ちそうな拡張機能をまとめてみた
VisualStudinoの役に立ちそうな拡張機能をまとめてみたVisualStudinoの役に立ちそうな拡張機能をまとめてみた
VisualStudinoの役に立ちそうな拡張機能をまとめてみた
 
Hacker centric culture @devlove 110423
Hacker centric culture @devlove 110423Hacker centric culture @devlove 110423
Hacker centric culture @devlove 110423
 
Tokaido 53 walk
Tokaido 53 walkTokaido 53 walk
Tokaido 53 walk
 
How Changing Mobile Technology Is Changing The Way We Create Economy.
How Changing Mobile Technology Is Changing The Way We Create Economy. How Changing Mobile Technology Is Changing The Way We Create Economy.
How Changing Mobile Technology Is Changing The Way We Create Economy.
 
kernel code reading party on March 28th, 2014
kernel code reading party on March 28th, 2014kernel code reading party on March 28th, 2014
kernel code reading party on March 28th, 2014
 
1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng
1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng
1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng
 
対人関係におけるアルコールの効用
対人関係におけるアルコールの効用対人関係におけるアルコールの効用
対人関係におけるアルコールの効用
 
Project Based Learning using by PaaS
Project Based Learning using by PaaSProject Based Learning using by PaaS
Project Based Learning using by PaaS
 
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014
 

Ähnlich wie Debug Hacks at Security and Programming camp 2011

Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Hiro Yoshioka
 
Programming camp Debug Hacks
Programming camp Debug HacksProgramming camp Debug Hacks
Programming camp Debug HacksHiro Yoshioka
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
Edge os(vyos)の基本(入門編)
Edge os(vyos)の基本(入門編)Edge os(vyos)の基本(入門編)
Edge os(vyos)の基本(入門編)Akira Kaneda
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話simotin13 Miyazaki
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!Yohei Fushii
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code readingHiro Yoshioka
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)Yoshifumi Yamaguchi
 
TotalViewを使った代表的なバグに対するアプローチ
TotalViewを使った代表的なバグに対するアプローチTotalViewを使った代表的なバグに対するアプローチ
TotalViewを使った代表的なバグに対するアプローチRWSJapan
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Mori Shingo
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggugkimukou_26 Kimukou
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライドkoturn 0;
 
Potatotops20141217
Potatotops20141217Potatotops20141217
Potatotops20141217Mogi Isamu
 

Ähnlich wie Debug Hacks at Security and Programming camp 2011 (20)

Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
 
Programming camp Debug Hacks
Programming camp Debug HacksProgramming camp Debug Hacks
Programming camp Debug Hacks
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
Edge os(vyos)の基本(入門編)
Edge os(vyos)の基本(入門編)Edge os(vyos)の基本(入門編)
Edge os(vyos)の基本(入門編)
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
 
TotalViewを使った代表的なバグに対するアプローチ
TotalViewを使った代表的なバグに対するアプローチTotalViewを使った代表的なバグに対するアプローチ
TotalViewを使った代表的なバグに対するアプローチ
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
0621 ndk game
0621 ndk game0621 ndk game
0621 ndk game
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
 
jenkinsで遊ぶ
jenkinsで遊ぶjenkinsで遊ぶ
jenkinsで遊ぶ
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライド
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
Potatotops20141217
Potatotops20141217Potatotops20141217
Potatotops20141217
 
about DakotagUI
about DakotagUIabout DakotagUI
about DakotagUI
 

Mehr von Hiro Yoshioka

Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活Hiro Yoshioka
 
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」Hiro Yoshioka
 
不揮発性メモリ(NVM)とはなにか
不揮発性メモリ(NVM)とはなにか不揮発性メモリ(NVM)とはなにか
不揮発性メモリ(NVM)とはなにかHiro Yoshioka
 
続・人生100年時代の学び方
続・人生100年時代の学び方続・人生100年時代の学び方
続・人生100年時代の学び方Hiro Yoshioka
 
人生100年時代における学び方 定年後の学生生活
人生100年時代における学び方 定年後の学生生活人生100年時代における学び方 定年後の学生生活
人生100年時代における学び方 定年後の学生生活Hiro Yoshioka
 
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...Hiro Yoshioka
 
人生100年時代の学び方、脳には可塑性がある
人生100年時代の学び方、脳には可塑性がある人生100年時代の学び方、脳には可塑性がある
人生100年時代の学び方、脳には可塑性があるHiro Yoshioka
 
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7Hiro Yoshioka
 
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演Hiro Yoshioka
 
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】Hiro Yoshioka
 
未経験プログラマがコボルコンパイラを作った話 #compiler_study
未経験プログラマがコボルコンパイラを作った話 #compiler_study未経験プログラマがコボルコンパイラを作った話 #compiler_study
未経験プログラマがコボルコンパイラを作った話 #compiler_studyHiro Yoshioka
 
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12Hiro Yoshioka
 
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56Hiro Yoshioka
 
理科系の作文技術
理科系の作文技術理科系の作文技術
理科系の作文技術Hiro Yoshioka
 
Agile Software Development advanced course (PBL) at AIIT, 2015
Agile Software Development advanced course (PBL) at AIIT, 2015Agile Software Development advanced course (PBL) at AIIT, 2015
Agile Software Development advanced course (PBL) at AIIT, 2015Hiro Yoshioka
 
質問される力 #TechGirls
質問される力 #TechGirls質問される力 #TechGirls
質問される力 #TechGirlsHiro Yoshioka
 
Oracle vs Google API 著作権裁判を考える
Oracle vs Google API 著作権裁判を考えるOracle vs Google API 著作権裁判を考える
Oracle vs Google API 著作権裁判を考えるHiro Yoshioka
 
Using oss at an internet company and hacker culture
Using oss at an internet company and hacker cultureUsing oss at an internet company and hacker culture
Using oss at an internet company and hacker cultureHiro Yoshioka
 
IT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan
IT勉強会 Anatomy of IT Study groups, seminars, conferences in JapanIT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan
IT勉強会 Anatomy of IT Study groups, seminars, conferences in JapanHiro Yoshioka
 

Mehr von Hiro Yoshioka (20)

Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
 
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
 
不揮発性メモリ(NVM)とはなにか
不揮発性メモリ(NVM)とはなにか不揮発性メモリ(NVM)とはなにか
不揮発性メモリ(NVM)とはなにか
 
続・人生100年時代の学び方
続・人生100年時代の学び方続・人生100年時代の学び方
続・人生100年時代の学び方
 
人生100年時代における学び方 定年後の学生生活
人生100年時代における学び方 定年後の学生生活人生100年時代における学び方 定年後の学生生活
人生100年時代における学び方 定年後の学生生活
 
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
 
人生100年時代の学び方、脳には可塑性がある
人生100年時代の学び方、脳には可塑性がある人生100年時代の学び方、脳には可塑性がある
人生100年時代の学び方、脳には可塑性がある
 
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
 
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
 
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
 
未経験プログラマがコボルコンパイラを作った話 #compiler_study
未経験プログラマがコボルコンパイラを作った話 #compiler_study未経験プログラマがコボルコンパイラを作った話 #compiler_study
未経験プログラマがコボルコンパイラを作った話 #compiler_study
 
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
 
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
 
理科系の作文技術
理科系の作文技術理科系の作文技術
理科系の作文技術
 
Agile Software Development advanced course (PBL) at AIIT, 2015
Agile Software Development advanced course (PBL) at AIIT, 2015Agile Software Development advanced course (PBL) at AIIT, 2015
Agile Software Development advanced course (PBL) at AIIT, 2015
 
質問される力 #TechGirls
質問される力 #TechGirls質問される力 #TechGirls
質問される力 #TechGirls
 
Oracle vs Google API 著作権裁判を考える
Oracle vs Google API 著作権裁判を考えるOracle vs Google API 著作権裁判を考える
Oracle vs Google API 著作権裁判を考える
 
Using oss at an internet company and hacker culture
Using oss at an internet company and hacker cultureUsing oss at an internet company and hacker culture
Using oss at an internet company and hacker culture
 
Be Hacker
Be HackerBe Hacker
Be Hacker
 
IT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan
IT勉強会 Anatomy of IT Study groups, seminars, conferences in JapanIT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan
IT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan
 

Kürzlich hochgeladen

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Kürzlich hochgeladen (9)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

Debug Hacks at Security and Programming camp 2011

  • 1. Debug Hacks 8/11/'11 よしおかひろたか (Debug Hacks 著者 ) hyoshiok@gmail.com http://d.hatena.ne.jp/hyoshiok/ twitter @hyoshiok
  • 2. Debug Hacks ● Debug Hacks -- デバッグを極めるテク ニック & ツール ● 吉岡 弘隆 , 大和 一洋 , 大岩 尚宏 , 安部 東洋 , 吉田 俊輔 ● ISBN:978-4-87311-404-0 ● オライリー・ジャパン ● 2009 年 4 月 22 日
  • 3. デバッグ入門 ● デバッグとは、ソフトウェアの不具合(バグ) を修正するプロセス ● ソフトウェアの不具合を発見するプロセスのこ とはテストとよぶ ● ソフトウェアの不具合を修正するのではなく回 避する方法をトラブルシューティングとよぶ ● Debug Hacks は主に(狭義の)デバッグについ て解説した書籍
  • 5. バグ ● ソフトウェアの不具合(仕様との差異) – テストで発見する – それ以外で発見される ● たまたま使っていて発見、…
  • 6. バグのパターン ● 正常に終了(バグではない) ● 期待する動作をしないで終了 – 期待する出力をしない、クラッシュ、遅い、 ● 終了しない – デッドロック、無限ループ、
  • 7. デバッグのプロセス ● 問題の再現 – 環境設定 – ヒアリング ● 現象の確認 ● 問題の理解、解析 ● 原因が不明? – 過去にあった同様の問題を検索(バグ DB など) – バグ発生へ、そなえる – 同僚に説明する – コミュニティへ質問する
  • 8. デバッグのプロセス ● バグ修正 ● 動作確認 – バグが直っていることの確認 – デグレード/エンバグがないことの確認 (リグレッションテストの実行) ● ピアレビュー ● テストプログラムの作成 ● コミュニティへの報告(必要であれば)
  • 9. デバッガを使おう ● 任意の場所にブレークポイントを設定できる。 ● プログラムを変更しなくても、変数の値を確認 することができる。 ● プログラムを変更しなくても、変数に任意の値 を設定できる。 ● 変数に値が代入されたときに停止することがで きる。 ● コールグラフ(バックトレース)を表示でき る。 ● printf() デバッグださいよね。
  • 10. デバッグのプロセス ● 期待しない値を出力して終了というケース – 任意の場所にブレークポイントを設定 – 実行 – 任意の変数の値を確認(期待通りか) ● 期待通りじゃない場合は、実行前半部分にバグ? ● 期待通りの場合は、実行後半にバグ? ● 終了しないケースは後述
  • 11. GDB の基礎の基礎 ● Gcc でコンパイルする $gcc -g -Wall -Wall はとっても重要 その他、下記のフラグも -W -Wformat=2 -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wfloat-equal -Wpointer-arith ● Makefile では CFLAGS にオプションを追加 ● INSTALL や README ファイルなどを確認
  • 12. GDB の基礎の基礎 ● 起動 ● $gdb 実行ファイル名 ● $gdb -c コアファイル 実行ファイル名 ● emacs から起動するときは、 M-x gdb
  • 13. GDB の基礎の基礎 ● ブレークポイントの設定 – 任意の場所で停止する ● break 関数名 ● break 行番号 ● break ファイル名:行番号 ● break ファイル名:関数名 ● break [+|-] オフセット ● break * アドレス
  • 14. ブレークポイント ● 設定したブレークポイントの確認 info break
  • 15. 実行 ● run コマンド ● run 引数 ● main() にブレークポイントを設定して main() まで実行する – start コマンド
  • 16. ブレークしたら ● どこで停止したか。 backtrace コマンド (bt と略す )
  • 17. 変数の表示 ● print[/ フォーマット ] 変数 – `x' 16 進数で表示 – `d' 10 進数で表示 – `u' 符号なしの 10 進数で表示 – `o' 8 進数で表示 – `t' 2 進数で表示。 `t' は "two" からくる。 – `a' アドレス – `c' 文字 (ASCII) として表示 – `f' 浮動小数点 – `s' 文字列として表示
  • 18. アドレスの表示 ● x[/NFU] アドレス ● N 繰り返し回数 ● F フォーマット ● U 単位 – `b' バイト – `h' ハーフバイト( 2 バイト) – `w' ワード( 4 バイト) デフォルト – `g' ジャイアントバイト (8 バイト)
  • 19. 逆アセンブル ● disassemble コマンド
  • 20. 実行の再開 ● ステップ実行 ● continue ● finish/until
  • 21. ステップ実行 ● ソースコード一行分実行する ● next – ソースコード一行分実行し停止する。関数呼び出し の場合、関数を実行後停止する。 ● step – ソースコード一行分実行し停止する。関数呼び出し の場合、その関数の最初の実行文を実行し停止す る。(もぐって行く)
  • 22. continue ● 実行を再開する – ブレークポイントで停止する – 実行を終了する
  • 23. finish/until ● finish 関数を最後まで実行 – 関数の入り口でいろいろ調べた後、最後まで一気に 実行したいとき便利 ● until ループが終わるまで実行 – ループの入り口でいろいろ調べた後、ループを一気 に実行したいとき便利
  • 24. 実行の再開のまとめ ● next/step ● continue ● finish/until
  • 25. 変数へ代入されたとき止めたい ● ウォッチポイント。任意の変数に代入された時 に停止する。 ● watch 式(式が変更された時に停止) ● awatch 式(式が参照、変更された時に停止) ● rwatch 式(式が参照された時に停止) ● どこであるアドレスが変更されるか、よく分か らないときなどに利用すると便利。実行速度の 低下がある。
  • 26. その他のブレークポイント ● ハードウェアブレークポイント (hbreak) ● 一時ブレークポイント (tbreak)
  • 27. 変数の値の変更 ● set variable 変数 = 式 ● ソースコードを変更する前に試行錯誤して確認 できる。
  • 28. その他のコマンド ● info threads ● thread ● info registers ● frame
  • 29. 期待しない値のケースのまとめ ● 任意の場所にブレークポイントを設定 ● 実行開始 ● 停止したら値の確認 ● 実行の再開 ● バグの原因を見つけるまで上記を繰り返す
  • 30. 終了しない場合 ● 無限ループ、デッドロックなどで終了しない場 合のデバッグ ● 当該プロセスのプロセス ID を調べる $ ps aux|grep プログラム名 ● プロセスへアタッチする ● attach プロセス ID ● アタッチすると実行を停止するので、デバッグ をはじめる
  • 31. コアファイルがある場合 ● $gdb -c コアファイル プログラム名 ● コアファイルを生成した時点でのスタックト レースなどが見れる
  • 32. まとめ ● GDB の基本の基本を紹介した ● GDB は便利な機能満載なので使ってみよう ● Debug Hacks の感想、コメント、誤植の発見な どなど、著者 (hyoshiok@gmail.com) まで教え てください。
  • 33. 付録: Debug Tools ● kprobes ● jprobes ● KAHO ● systemtap ● VMware Vprobe ● crash ● gdb
  • 34. kprobes ● 任意のアドレスにプローブを挿入 ● Debug Hacks, #47, #49, #50
  • 35. jprobes ● 関数の先頭にプローブを設定することに特化し ているので、 kprobes よりもお手軽 ● Debug Hacks, #48
  • 36. KAHO ● プロセスの関数を置き換えることができる ● Debug Hacks, #51
  • 37. systemtap ● kprobes を利用して、独自のスクリプト言語を 用いてプローブハンドラを作成する。 ● Debug Hacks, #52, #53
  • 38. VMware Vprobe ● ゲスト OS の状態を調査することができる ● Debug Hacks, #61
  • 39. crash ● kernel crash dump utility ● Debug Hacks, #21
  • 40. gdb ● デバッガー ● Debug Hacks, #5, #6, #7
  • 41. 参考文献 ● Intel® 64 and IA-32 Architectures Software Developer's Manuals http://www.intel.com/products/processor/manuals/index.htm