最近PHPの中身を探ることが多くなってきました。以前PHPカンファレンス2011で話した「PHPをハックしてオレオレ文法を追加する」のなかでは、PHPの内部の動きを知るにはソースコードリーティングだけだと実際にどんな動きをしているのかわかりづらいので、そういう時はGDB使ってやるといいよ、というふうなことを言いました。とかいいつつ、実際にはGDBを直接使ってはいません。操作がプリミティブ過ぎて使いづらいからです。代わりに、GDBフロントエンドの一つであるCGDBというソフトウェアを利用しています。 この記事ではこのCGDBの概要について簡単に説明します。 CGDBの何が便利なのか GDBフロントエンドには、DDD、Insightなどがあります。また、純粋なGDBフロントエンドの他にも、Eclipse CDT、XcodeなどGDBフロントエンドとしての機能を有しているIDEなどがあります。こ
http://mysite.verizon.net/astronaut/vim/#GDBMGR ちょっとだけ試してみた。 vimgdb と違い、コンソールでも使える。 python or perl インターフェイスが必要。 コンパイルしといて export LD_LIBRARY_PATH="$HOME/.vim/gdbmgr/src:default"起動 :GdbMgr prognameキーバインド F6 ブレークポイントトグル n next s step など。コンパイルした共有オブジェクトに libcall() してそこから forkpty() して gdb を起動している。 現時点での完成度は、ごく小さなプログラムには使えそうだけど…という感じ。 TTYShare にアップしたらうまく表示されなかったので、ttyrecord データをここに置いとく。 http://www.k3.di
Twitter上で、@alohakun が言及していた GDB の reverse debugging の機能を使ってみました。 GDB にトレースと逆実行機能入ったのか。 http://www.gnu.org/software/gdb/news/reversible.html http://twitter.com/alohakun/status/4481139191 まずは簡単な使い方を説明したあとに、インストール方法を説明します。 こんなときに便利 「変なこと」が起きている大体の場所がわかっているとき デバッグ中に、大体どこで変なことが起きているかはわかっているけど、細かい場所は特定できていないとき、reverse debuggingが効果を発揮します。 GDBでステップ実行をしていて、「しまった!行きすぎた!」という経験はよくあると思います。こういうとき、今まではプログラムの実行を最
gdb で catch throw を使えば例外を捕捉できるという話をコメントで教えていただいたので、試してみた。 #include <string> static void foo(void); int main() { foo(); return 0; } static void foo() { std::string s = "abc"; s.replace(-1, 0, "d"); } % g++ -g -Wall -W -O2 exc_bt.cpp -o exc_bt % gdb exc_bt GNU gdb 6.4.90-debian Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you
gdb豆知識(d:id:hyoshiok:20080926#p1)の続き。 Windowsの開発環境は知らないのだけど、噂によると素敵なIDE(統合開発環境)が整備されていて、マウスでぐりぐり、ヘルプも充実、簡単簡単らしい。それから比べると、GNU Emacs+gcc+gdbというのは微妙にレトロ感あふれる。とは言うもののデバッグのプロセスはIDE的マルチウィンドウ、GUIでグリグリであろうとなかろうと基本は変らないので、よしとしよう。 コンパイル時のオプション gccの-gオプションを付ける。Makefileのコンパイルオプションは通常CFLAGSなのでCFLAGS=-gとしておく。最適化オプション(-O)と同時に付けることができるので(素晴しい)、最適化オプションも適当に付けておく。 時々、デバッグオプション(-g)を付けるときは最適化オプションをつけない、あるいは-O0(アルファベッ
gdbのvimインターフェイスであるvimgdbのインストールと設定について説明する。emacsのgdbモードがvim使いにとって唯一emacsがうらやましい点だったがそれも解消した!(●´ω`●) ホホング ./configure --enable-xxxでvimでサポートする機能を指定する。指定リストはヘルプのeval.txtを参照。また $ ./configure --with-XX > log 2>&1 とすることで、指定した機能が使用するライブラリなどが現在のシステムにインストールされているかを logファイルで確認できるので、コンパイルに失敗した時などに確認すると原因をすばやく特定できる。 Woody Debian dist-upgradeの環境で何もオプションを付けずにconfigureすると以下の機能がサポートされた状 態でコンパイルされた。 -arabic +aut
FreeBSD上でvimをデバッグする環境を整えよう。 以下、カレントディレクトリはvimのsrcディレクトリであるとします。 gdbでアタッチ まずは素朴に $ gdb vimとしてみる。vimが立ち上がるが、端末がvimに占居されて しまい、gdbを操作できなくなるので当然ダメ。そこで $ gdb --args vim -gとgvimを起動してみる。するとgvimウィンドウが現れるのだが… (gdb) run Starting program: /usr/home/ao/dl/vim70/src2/vim -g Program exited normally. (gdb) なんとプロセスがすでに正常終了している。 まだウィンドウが目の前に出ているのに。 GUIモードを起動するときfork()しているからだろうか。 ではあらかじめgvimを起動しておき、gdbでアタッチするしかないのかな
http://cgdb.sourceforge.net/ curses を使った gdb インターフェイス。 vi キーバインドで gdb を操作できる。かなりいい感じ。 $ cgdb -- a.outで起動。上側のウィンドウがソースウィンドウ(CGDB Mode)。下側が GDB Window (GDB Mode)。 i と Esc で2つのウィンドウ間を行き来できる。 ソースウィンドウで使えるコマンドの一部: Space ブレークポイント設定 j k カーソル移動 / ? 検索 o ファイル選択ウィンドウを開く T デバッギへの入力をタイプするための TTY ウィンドウを開く i GDB ウィンドウへ s c n r step continue next run (:set shortcut しているときのみ有効) : コロンコマンド。:set :run :q など 設定ファイルは ~
はじめて Clewn を使ってみた。 http://clewn.sourceforge.net/index.html Clewn は vim と gdb を統合させるプログラムだが、その実現手段は2通りある。 1つは単体のプログラム clewn を使う方法。 もう1つは vimGdb として vim に対するパッチをあてる方法。 両者はソースを共有し、ほとんど同じ機能を提供するが、vimGdb は gdb の式を評価した値をポップアップ表示できない デバッギの出力を gdb の tty コマンドで他の端末に渡さねばならない デバッグ情報として埋め込まれたソースコードのパスを vim に知らせることができない などの制限をもつ。 Clewn の pty.c は screen からもってきたらしい。GPL なのはそのためだろうか。 でもこれ、vim の pty.c とも同じなんだよなあ。 と思
gdb tips gdb を使う上で便利な tips を紹介します。基本的な使い方をマスターしている人向けです。 .gdbinit の設定 ホームディレクトリに .gdbinit を置いておくと、gdb の起動の際に読み込まれます。私の場合は次のような設定をしています。 set history save on set history size 10000 set history filename ~/.gdb_history set print pretty on set print static-members off set charset ASCII set history から始まる最初の 3行は履歴に関する設定です。それぞれ、 gdb のコマンドラインの履歴をファイルに保存する、保存する行は最大 10000 行、ファイル名は ~/.gdb_history 、という意味になります。
vim+gdbを入れてみた。激しく便利。 vimGdb install 参考にしたのは、 Wolf & Kiss - Vimgdb インストールと使用法。 A FreeBSD GIMPer vimGdbをいれる。 .vimrcの設定。 慣れるのにちょっと時間がかかるけど、gdbを立ち上げたまま作業出来るのでらくちん。 ちなみに、僕のコンパイルオプションは、 % ./configure --prefix=$HOME/local/vim --with-features=big \ --enable-rubyinterp --enable-pythoninterp --enable-perlinterp --enable-mzschemeinterp \ --enable-multibyte --enable-gettext --enable-iconv --enable-langmap --e
はじめに プログラムのデバッグと言えばひたすらprintfを挿入しまくっていたある日、 デバッガなる便利な代物があるということを知った。なんでもプログラムを一行 ずつ実行できて、変数の値をその場で確認できるらしい。これは是非使ってみねばと 思い、UNIX環境で使えるGDBというデバッガを試してみた。が、何がなんだかさっぱり 分からない。Webを検索するとマニュアルの日本語訳が見つかった。これで勉強すれば 使えるようになるかも、と読み始めるも、いきなりm4がどうのこうのだの、意味不明 の文章が続く…。 これは私がGDBを使い始めた時の話だが、似たような経験を持っている人が他にもいる と思う。 GDBのマニュアルは初心者にはすこし敷居が高い。 GDBに限らずマニュアルというものは初学者が参考書として用いるのには 適していない。というのも、マニュアルの類は情報量が多い分、重要な部分を 見つけ出す
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く