投稿

ラベル(gdb)が付いた投稿を表示しています

PostgreSQL gdb debug

PostgreSQL も gdb で読むための作業です。 http://www.postgresql.org/docs/current/static/git.html から git で落としてきます。 yacc が使われているらしいので一応インストール。 brew install bison make いつもの configure 。 configure --enable-debug --prefix=$BUILD_DIR/POSTGRESQL_BUILD そのまま、 make make install 結構時間かかります。 データベースの設定 PGDATA は PostgreSQL のデータが入るディレクトリです。 データベースの初期化から。 $BUILD_DIR/POSTGRESQL_BUILD/bin/initdb -D $PGDATA で、PostgreSQL を起動。 $BUILD_DIR/POSTGRESQL_BUILD/pg_ctl -D $PGDATA -l logfile_name start データベースを作り、PostgreSQL に接続。プロンプトが出たらやったー。 $BUILD_DIR/POSTGRESQL_BUILD/createdb test_db $BUILD_DIR/POSTGRESQL_BUILD/psql test_db あらたにコンソールを立ち上げ、 ps -ef | grep postgres で、PostgreSQL のプロセスを探し出す 以下のが見つかれば 501 904 788 0 1:34PM ?? 0:00.01 postgres: USER user [local] idle プロセス番号を使って gdb $BUILD_DIR/BUILD_POSTGRESQL/bin/postgres (gdb) attach 904 で接続し、psql を実行したセッションで適当に SQL を打ってデバッグします。 (gdb) until で待つのが良いみたい。

MySQL gdb debug

イメージ
環境は Mac OS X です。 とりあえずダウンロード まず http://dev.mysql.com/downloads/mysql/ からソースをダウンロードしてきます。 で下記のドロップダウンリストから source code を選択してダウンロード。 .tar.gz 形式の Generic Linux でよいかと。 で、それのダウンロードが終わったら解凍します。 tar zxvf mysql-5.6.11.tar.gz 解凍後、 cd mysql-5.6.11 どこか適当なところに、bin や script が入るディレクトリと、MySQL のデータが入るディレクトリを作っておきます。 mkdir -p $BUILD_DIR/MYSQL_BUILD/MYSQL_DATA make gdb で追うため、デバッグオプションを付ける必要があります。 一つ(2つ?)のディレクトリで完結し、それ消したら「はい、さようなら」みたいな状態にしたいので、prefix の指定もします。 MySQL を make する際、最初は Makefile がありません。 別の make を使う必要があります。 brew install cmake というわけで cmake をインストール。 ついでに、構文解析器の部分も見るため、MySQL に使われている yacc のソースを追えるように、 brew install bison もやっときます。 で、cmake ですが……ようわかりません。 なのでオプションを見てみます。 cmake . -LH でオプション一覧。 とりあえず今回は、 cmake -DWITH_DEBUG:BOOL=ON -DMYSQL_DATADIR:PATH=$BUILD_DIR/MYSQL_BUILD/MYSQL_DATA -DCMAKE_INSTALL_PREFIX:PATH=$BUILD_DIR/MYSQL_BUILD WITH_DEBUG デバッグ用 gdb で読める MYSQL_DATADIR データ用のディレクトリ CMAKE_INSTALL_PREFIX make install したときに bin やら script やらが入るディレクトリ ...

LLVM debug

適当にディレクトリを作る。 mkdir llvm-debug そのディレクトリに入って、svn でソースを引っ張ってくる。 svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm 引っ張ってきたソース内で、 cd llvm/tools svn co http://llvm.org/svn/llvm-project/cfe/trunk clang cd llvm/projects svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite 最初に作ったディレクトリ(ex.llvm-debug)と同階層に、ビルド用のディレクトリを作る。 mkdir build その中で configure する。 cd build ../llvm/configure --disable-optimized --enable-debug-runtime --enable-debug-symbols --prefix=/(置きたいディレクトリ)/ make で、gdb で実行すればデバッグできる。 参考 LLVM を GDB でデバッグする

gdb手順

使用するコード 適当に。 /*test3.c*/ #include int sub(); int main(){ printf("main\n"); sub(); return 0; } int sub(){ printf("sub\n"); return 0; } ただこの関数にいますよーって表示するだけのプログラム。 コンパイル -gオプションを付けてコンパイルする。 %gcc -g -o test3 test3.c %ls test.c test3.dSYM test3 なんかへんなファイルが増えてる。こいつが gdb で読むのに必要。 gdb起動 gdbを起動する。引数は実行ファイル。 %gdb test GNU gdb 6.3.50-20050815 (Apple version gdb-1705) (Fri Jul 1 10:50:06 UTC 2011) Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "x86_64-apple-darwin"...Reading symbols for shared libraries .. done (gdb) 上は起動直後。(gdb)の後に gdb 用のコマンドを打ち込んで使う。今はプログラムが止まっている状態。ここから、ブレークポイントを設定しプログラムを run する。 (gdb) b su...

gdb操作

LLVMのソースを、授業で読むのに使うので。手加減なく初心者なので勉強。 gdb起動 gdb --args プログラム --引数 gdb操作 run/r ブレークポイントを設定したプログラムを動かす。 break/b ファイル名or行数 ブレークポイントの設定。走らせたときにこの関数で止めるよ、っっていう指定。行数、ファイル名などなど。 next/n 次を表示。次が関数なら、関数を読み飛ばす。 return 文でやるとひとつ飛ばされてしまう。 step/s 次を表示。次が関数なら、関数に入る。 list/l 今いる場所のコードを見せる。 -gオプションでコンパイルしないと見られない。 print/p 変数名 変数の表示。中に何が入っているのか。 where 今いる階層。スタックを表示する。#0が今いる階層。一番下が開始する階層。一番下はmain関数であることがほとんど。 up 関数スタックの上に上がる。 down 関数スタックの下に下がる。 info b ブレークポイントの情報を見る。 continue/c 走らせているプログラムを、次のブレークポイントまですすめる。 delete/d ブレークポイントを削除する。 finish/fin いまいる関数を終わらせる。 一度コマンドを入れたら、そのあとはエンターキーを押すだけで同じ操作を実行してくれるらしい。

gdb実行方法

もうgdbがわっけわからんのでいろいろと。 準備 gcc -g ソースファイル として、gdb実行用のファイルを作る必要がある。 gcc -g main.c とすれば、 main.dSYM というファイルが出来る。 これでgdbを使用してデバッグできるようになる。 起動 gdb 実行ファイル これで起動。 GNU gdb 6.3.50-20050815 (Apple version gdb-1705) (Fri Jul 1 10:50:06 UTC 2011) Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "x86_64-apple-darwin"...Reading symbols for shared libraries .. done (gdb) がーっと出てくる。最初びっくりしたが、こんなもん。プログラムむっちゃいっぱいある。