SlideShare a Scribd company logo
Debug Hacks
             8/13/'10

よしおかひろたか (Debug Hacks 著者 )
        hyoshiok@gmail.com
  http://d.hatena.ne.jp/hyoshiok/
http://blog.miraclelinux.com/yume/
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

More Related Content

What's hot

anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
y-uti
 
初めてのCPUを作ってみた
初めてのCPUを作ってみた初めてのCPUを作ってみた
初めてのCPUを作ってみた
Eric Sartre
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
Hiro Yoshioka
 
第一回サーバー勉強友の会
第一回サーバー勉強友の会第一回サーバー勉強友の会
第一回サーバー勉強友の会
Takahashi Tomohiko
 
第二回サーバー勉強友の会
第二回サーバー勉強友の会第二回サーバー勉強友の会
第二回サーバー勉強友の会
Takahashi Tomohiko
 
Groovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugGroovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjug
kyon mm
 
Predefを使ったsqlのトレース
Predefを使ったsqlのトレースPredefを使ったsqlのトレース
Predefを使ったsqlのトレース
悠滋 山本
 
Node.js Error & Debug Leveling
Node.js Error & Debug LevelingNode.js Error & Debug Leveling
Node.js Error & Debug Levelingkumatch kumatch
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
y-uti
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
 
YAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaXYAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaXKazuyuki Todo
 
Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法
yhara
 
About func unit
About func unitAbout func unit
About func unitgray Space
 
Closures and methodMissing are real
Closures and methodMissing are realClosures and methodMissing are real
Closures and methodMissing are realTakahiro Sugiura
 
mq 使ってみたよ
mq 使ってみたよmq 使ってみたよ
mq 使ってみたよ
Tomohiro NAKAMURA
 
俺とコーディング規約とツール
俺とコーディング規約とツール俺とコーディング規約とツール
俺とコーディング規約とツール
Masayuki KaToH
 
xv6から始めるSPIN入門
xv6から始めるSPIN入門xv6から始めるSPIN入門
xv6から始めるSPIN入門
Ryousei Takano
 
PowerShell 紹介
PowerShell 紹介PowerShell 紹介
PowerShell 紹介
tsudaa
 
WordPress のための PHP 超入門
WordPress のための PHP 超入門WordPress のための PHP 超入門
WordPress のための PHP 超入門
Michinari Odajima
 

What's hot (20)

anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
 
初めてのCPUを作ってみた
初めてのCPUを作ってみた初めてのCPUを作ってみた
初めてのCPUを作ってみた
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
第一回サーバー勉強友の会
第一回サーバー勉強友の会第一回サーバー勉強友の会
第一回サーバー勉強友の会
 
第二回サーバー勉強友の会
第二回サーバー勉強友の会第二回サーバー勉強友の会
第二回サーバー勉強友の会
 
Groovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugGroovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjug
 
Predefを使ったsqlのトレース
Predefを使ったsqlのトレースPredefを使ったsqlのトレース
Predefを使ったsqlのトレース
 
Node.js Error & Debug Leveling
Node.js Error & Debug LevelingNode.js Error & Debug Leveling
Node.js Error & Debug Leveling
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
 
YAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaXYAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaX
 
Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法
 
About func unit
About func unitAbout func unit
About func unit
 
Closures and methodMissing are real
Closures and methodMissing are realClosures and methodMissing are real
Closures and methodMissing are real
 
mq 使ってみたよ
mq 使ってみたよmq 使ってみたよ
mq 使ってみたよ
 
俺とコーディング規約とツール
俺とコーディング規約とツール俺とコーディング規約とツール
俺とコーディング規約とツール
 
xv6から始めるSPIN入門
xv6から始めるSPIN入門xv6から始めるSPIN入門
xv6から始めるSPIN入門
 
PowerShell 紹介
PowerShell 紹介PowerShell 紹介
PowerShell 紹介
 
WordPress のための PHP 超入門
WordPress のための PHP 超入門WordPress のための PHP 超入門
WordPress のための PHP 超入門
 
Rspec
RspecRspec
Rspec
 

Viewers also liked

Vimエディタ マクロの話
Vimエディタ マクロの話Vimエディタ マクロの話
Vimエディタ マクロの話Taku Omi
 
まりこの部屋Dx for ネクスト様
まりこの部屋Dx for ネクスト様まりこの部屋Dx for ネクスト様
まりこの部屋Dx for ネクスト様
Mariko Yamaguchi
 
Elmで始めるFunctional Reactive Programming
Elmで始めるFunctional Reactive Programming Elmで始めるFunctional Reactive Programming
Elmで始めるFunctional Reactive Programming
Yasuyuki Maeda
 
コンテンツをディレクションするということ
コンテンツをディレクションするということコンテンツをディレクションするということ
コンテンツをディレクションするということ
Yoshihiro Kanematsu
 
Wo! vol.23 米Coca-Colaサイトにみるコンテンツ・マーケティング
Wo! vol.23 米Coca-Colaサイトにみるコンテンツ・マーケティングWo! vol.23 米Coca-Colaサイトにみるコンテンツ・マーケティング
Wo! vol.23 米Coca-Colaサイトにみるコンテンツ・マーケティング
thinkjam.Inc.
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
MOCKS | Yuta Morishige
 
色彩センスのいらない配色講座
色彩センスのいらない配色講座色彩センスのいらない配色講座
色彩センスのいらない配色講座
Mariko Yamaguchi
 

Viewers also liked (7)

Vimエディタ マクロの話
Vimエディタ マクロの話Vimエディタ マクロの話
Vimエディタ マクロの話
 
まりこの部屋Dx for ネクスト様
まりこの部屋Dx for ネクスト様まりこの部屋Dx for ネクスト様
まりこの部屋Dx for ネクスト様
 
Elmで始めるFunctional Reactive Programming
Elmで始めるFunctional Reactive Programming Elmで始めるFunctional Reactive Programming
Elmで始めるFunctional Reactive Programming
 
コンテンツをディレクションするということ
コンテンツをディレクションするということコンテンツをディレクションするということ
コンテンツをディレクションするということ
 
Wo! vol.23 米Coca-Colaサイトにみるコンテンツ・マーケティング
Wo! vol.23 米Coca-Colaサイトにみるコンテンツ・マーケティングWo! vol.23 米Coca-Colaサイトにみるコンテンツ・マーケティング
Wo! vol.23 米Coca-Colaサイトにみるコンテンツ・マーケティング
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
 
色彩センスのいらない配色講座
色彩センスのいらない配色講座色彩センスのいらない配色講座
色彩センスのいらない配色講座
 

Similar to Programming camp 2010 debug hacks

Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
Hiro Yoshioka
 
Programming camp Debug Hacks
Programming camp Debug HacksProgramming camp Debug Hacks
Programming camp Debug Hacks
Hiro Yoshioka
 
TotalViewを使った代表的なバグに対するアプローチ
TotalViewを使った代表的なバグに対するアプローチTotalViewを使った代表的なバグに対するアプローチ
TotalViewを使った代表的なバグに対するアプローチ
RWSJapan
 
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
 
Edge os(vyos)の基本(入門編)
Edge os(vyos)の基本(入門編)Edge os(vyos)の基本(入門編)
Edge os(vyos)の基本(入門編)
Akira Kaneda
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
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 reading
Hiro Yoshioka
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
Functions
FunctionsFunctions
Functions
do_aki
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
Yoshifumi Yamaguchi
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggugkimukou_26 Kimukou
 
Rails解説セミナー: Railsアプリケーションのデバッグ
Rails解説セミナー: RailsアプリケーションのデバッグRails解説セミナー: Railsアプリケーションのデバッグ
Rails解説セミナー: Railsアプリケーションのデバッグ
Yohei Yasukawa
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
Mori Shingo
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1Ryosuke IWANAGA
 
Potatotops20141217
Potatotops20141217Potatotops20141217
Potatotops20141217Mogi Isamu
 

Similar to Programming camp 2010 debug hacks (20)

Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
Programming camp Debug Hacks
Programming camp Debug HacksProgramming camp Debug Hacks
Programming camp Debug Hacks
 
TotalViewを使った代表的なバグに対するアプローチ
TotalViewを使った代表的なバグに対するアプローチTotalViewを使った代表的なバグに対するアプローチ
TotalViewを使った代表的なバグに対するアプローチ
 
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
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
Edge os(vyos)の基本(入門編)
Edge os(vyos)の基本(入門編)Edge os(vyos)の基本(入門編)
Edge os(vyos)の基本(入門編)
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
jenkinsで遊ぶ
jenkinsで遊ぶjenkinsで遊ぶ
jenkinsで遊ぶ
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
Functions
FunctionsFunctions
Functions
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
 
Rails解説セミナー: Railsアプリケーションのデバッグ
Rails解説セミナー: RailsアプリケーションのデバッグRails解説セミナー: Railsアプリケーションのデバッグ
Rails解説セミナー: Railsアプリケーションのデバッグ
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
Potatotops20141217
Potatotops20141217Potatotops20141217
Potatotops20141217
 

More from 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-7
Hiro 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_study
Hiro 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 12
Hiro Yoshioka
 
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
Hiro 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, 2015
Hiro Yoshioka
 
質問される力 #TechGirls
質問される力 #TechGirls質問される力 #TechGirls
質問される力 #TechGirls
Hiro 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 culture
Hiro Yoshioka
 
Be Hacker
Be HackerBe Hacker
Be Hacker
Hiro Yoshioka
 
Project Based Learning using by PaaS
Project Based Learning using by PaaSProject Based Learning using by PaaS
Project Based Learning using by PaaS
Hiro Yoshioka
 

More from 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
 
Project Based Learning using by PaaS
Project Based Learning using by PaaSProject Based Learning using by PaaS
Project Based Learning using by PaaS
 

Recently uploaded

FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
atsushi061452
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 

Recently uploaded (15)

FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 

Programming camp 2010 debug hacks

  • 1. Debug Hacks 8/13/'10 よしおかひろたか (Debug Hacks 著者 ) hyoshiok@gmail.com http://d.hatena.ne.jp/hyoshiok/ http://blog.miraclelinux.com/yume/
  • 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