タグ

gdbに関するhackedのブックマーク (16)

  • http://karetta.jp/article/book/243420/243419/commentForm

  • ほげめも: gdb hacksアーカイブ

    gdb hacks 第 6 回。前回は IA-32 で gdb がデバッグレジスタをどのように活用しているかを見ました。今回はデバッグレジスタをプロセスが自分自身で利用する方法について考えてみます。

    hacked
    hacked 2010/01/14
  • gdb tips - bkブログ

    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 、という意味になります。

  • TosHiki - gdbでもっと調べる

    sample2では、sample1.c と同じく、確実にセグメンテーション・フォルトを起こすために sub2 関数で明示的に 0 を返すようにしています。来は、その直前のコメントアウトしている部分のように、なんらかのアドレスを確保して返す関数。 sample2.c また、-g オプションを付けてコンパイルし、実行形式を実行してコアダンプさせる。そして、gdb を起動してスタックトレースを確認する。 実行結果 今回は、libc.so.6 というライブラリの中の _IO_str_overflow_internal という関数でエラーが発生しているようである。 backtrace コマンド この関数がどのように呼び出されているのかを見てみる。 (gdb) bt #0 0x42070fa4 in _IO_str_overflow_internal () from /lib/tls/libc.so

    hacked
    hacked 2010/01/14
  • gdb の使い方・デバッグ方法まとめ

    たとえば、変数 var の値を2進数で表示したい場合は、次のように指定します。 (gdb) p/t var 一覧表示 whatis 変数の型を調べる。 info b 今設定しているブレークポイントの一覧を表示 セグメントフォルトをした後に利用すれば、どの関数で発生したか確認できます。 info stack 関数の呼び出しスタックの一覧を表示 info Thread 存在しているスレッドの一覧を表示 異なるアドレスにおける処理継続 以下のコマンドを使用することで、ユーザが選択したアドレスにおいて実行を継続させることができます jump linespec linespecで指定される行において、実行を再開 jump *address addressで指定されるアドレスにある命令から、実行を再開 アドレスが分かっている場合のメモリリーク出力 xはhexの意味です。 (gdb) p (char*)

    gdb の使い方・デバッグ方法まとめ
    hacked
    hacked 2010/01/11
  • Apacheモジュールの作成とgdbとloggerでのデバッグ方法 - よねのはてな

    ApacheのFilterモジュールを作った話しをしたらid:c9katayamaに情報公開しろと言われたままでしたので公開します。 C言語の勉強しようかな、Apache2.xのモジュールを作ってみようかな、gdb使ってデバッグしてみようかなと考えてた人にお勧めです。 JavaでのServletの開発経験のある人であれば、Filterの処理の動きやリクエストコンテキストの考え方は分かり易いはずなので、エントリを読み終わる頃にはApacheのモジュールをgdbでデバッグしながら作る事が出来るはずです。 mod_orzを作成 今回はmod_orzというApacheモジュールを作成します。 Apacheモジュールを作成する際には、apxsというモジュール開発用のコマンドを使用しテンプレートを作ります。 # apxs -g -n orz Creating [DIR] orz Creating [F

    Apacheモジュールの作成とgdbとloggerでのデバッグ方法 - よねのはてな
  • GDBコマンド一覧

    run プログラムを実行します。 run 何も引数を渡さずに実行します。 run arguments argumentsを引数に指定して実行します。 例えば「-v -o filename」を引数として起動したい場合はrun -v -o filenameとします。 runではプログラムの標準入出力をリダイレクトすることが可能です。 標準出力をファイルにリダイレクトするには run > filename 標準入力をファイルから読み込むには run < filename 標準出力をファイルに標準入力をファイルから読む込むには run < infile > outfile ↑ quit GDBを終了します。 quit GDBを終了します ↑ shell シェルコマンドを実行します。 shell シェル(通常 /bin/sh)を起動します。 シェルを終了するとGDBに戻ります

    hacked
    hacked 2010/01/10
  • gdbの使い方 Apacheをデバッグに役立つTips « イイ!! プログラミング Blog

    Apacheをシングルプロセスで立ち上げる Apache ハンドラーを開発しているときなど、httpd を 直接 gdbにかけたい場合、シングルプロセスで起動するとデバッグしやすい。 具体的には下記のように、「-X」オプションをつけて、apacheを起動します。 ブレークポイントをソース中に設定する gdbで、”’break 30”’とかやってもいいが、ソース中でbreak pointを設定することもできる。 特定の条件下の場合のみbreakさせたい場合などに便利。 signal.hをincludeしてSIGTRAPを投げるとbreakする。 サンプルコード #include <stdio.h> #include <signal.h> int main() { printf("a\n"); raise(SIGTRAP); printf("b\n"); return 0; } 参考書籍

  • 第2回 文字列置換関数の比較とgdbの使い方 | gihyo.jp

    はじめに 前回に引き続き、PHP最適化Tipsについて検証していきます。 今回は文字列置換関数の比較です。またgdbを用いたPHPコードの読み方についても紹介します。 strtr > str_replace > preg_replace の順に速い この3つの関数は細かな動きに違いはあるものの、文字列を置き換える関数です。このように同じ動きをする関数が多く存在するのは良くも悪くもPHPの特徴であるといえます。 下記のベンチマーク用のコードを用意して、計測を行います。 benchmark_strtr.php <?php $t = microtime(true); $i = 0; while($i < 1000) { $a = strtr('abcdefghijklmn', 'abc', 'ABC'); ++$i; } $tmp = microtime(true) - $t; var_dump

    第2回 文字列置換関数の比較とgdbの使い方 | gihyo.jp
    hacked
    hacked 2009/12/10
  • PHPでのデバッグ方法

    ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog おひさしぶりです。オークション担当の山崎 賢です。 前回はPHP Serialize についてでしたが、 今回はPHPでのデバッグに関してお話します。 基PHPはインタプリタ(厳密にはPHPは内部で一度コンパイルしていますのでインタプリタとは言い切れませんが) のデバッグではログ埋め込みが手軽です。 しかし、まれにSIGSEGVやSIGBUSなどでPHPスクリプトが落ちることがあり、途方にくれます。 地道にログを埋め込んでいき、箇所を特定するのも手法の1つですが、今回はgdbを用いたデバッグ方法を記載したいと思います。 ■STEP1 まずは、プログラムが落ちることを目的として以下のようなPHP Moduleを作成します。 ・ ・

    PHPでのデバッグ方法
  • MySQL

  • GDB/GDBserverによるクロスターゲットのリモートデバッグ

    GDB/GDBserverによるクロスターゲットのリモートデバッグ:Programing Bible(1/3 ページ) Linuxベースの組み込みシステムで動くアプリケーションのデバッグは厄介な仕事だが、GDBを使えば簡単に片付けられる。ここでは、GDBを使う上で最初の難関となるセットアップ周りについて解説する。 Linuxベースの組み込みシステムで動くアプリケーションのデバッグは厄介な仕事だが、理論上はGDB(GNUデバッガ)を使えば、ゆとりで片付けられるはずである。だが実際には、そのためのGDBのセットアップがやや難関となる。現実に作業が発生するし、克服すべき技術的な障害も存在するからだ。とはいえ、当て推量に頼らずプログラムを一定の方法で系統的にデバッグすることのメリットは、この作業に掛かる手間を補ってあまりある。この作業で生ずる困難を軽減するヒントを幾つか紹介しよう。 ターゲットプラ

    GDB/GDBserverによるクロスターゲットのリモートデバッグ
    hacked
    hacked 2009/07/08
  • PHPの実行をPHPのソースコード(C言語)のレベルで見る方法 - suztomoのはてなダイアリー

    PHPはソースコードを読めばわかるとおりC言語で書いてあります。 そのC言語の中でPHPがどんな処理をしているのかをデバッガであるgdbを用いて見ることができるのでそれを紹介します。まぁ普通のgdbの使い方なんですが:p ソースをダウンロードしてコンパイル PHP-5.2.6のソースをダウンロードします。 まず./configureするとのMakefileができます。 このMakefileの中で-gオプションがついていることを確認しましょう。*1 これがデバッガ(gdb)用のオプションで、コンパイルされたバイナリファイルにソースコードとの対応付けができます。 次にmakeします。時間がかかります。 サンプルファイル makeしている間に次のようなPHPファイルを作成しましょう。 <?php $i = "12"; $k = intval($i); ?> これは文字列の"12"をintval関

    PHPの実行をPHPのソースコード(C言語)のレベルで見る方法 - suztomoのはてなダイアリー
  • gcc+gdbによるプログラムのデバッグ 第3回 gdbの便利な機能、デバッグの例

    いくつかのバグを含むツリーソートのプログラムを用意しました。 treesort1.c #include <stdio.h> #include <stdlib.h> struct node { int value; struct node *left; struct node *right; }; void treeadd(struct node**, int); void treewalk(struct node*); void treefree(struct node*); int main(int argc, char **argv) { struct node *rootp; int i; int array[15] = {50, 12, 18, 70, 41, 19, 91, 1, 7, 6, 81, 65, 55, 20, 0}; for (i = 0; i < 15; i++)

    hacked
    hacked 2006/12/19
  • debugging with GDB

    gdbとは gdbは The GNU Project Debuggerのことです。 デバッグのためのツールです。 プログラムがエラー終了するが、どこが悪いのかわからない… というような時に便利です。 準備 デバッグ対象プログラムのコンパイル コンパイルしたプログラムにデバッグ情報を含めておくと、 デバッガでプログラムのソースを参照できるなど、 デバッグが非常に楽になります。 gccやUNIXのccでは、コンパイル時に「-g」オプションを付加すると デバッグ情報を生成します。 最適化オプション「-O」と デバッグオプション「-g」の両方は 同時に指定できないコンパイラもあるので注意してください。 gccは同時に指摘できます。 なお、FreeBSDやRedHat Linuxのccの正体はgccなので、 「-O」と「-g」を同時に指定できます。 makeでコンパイルしている場合には、 「-g」オ

  • ユメのチカラ: 大規模ソフトウェアをgdbを利用して微視的視点から理解をする

    たまたま講読している php-dev というPHPの実装を日語で議論するメーリングリストで「mbstring の新関数」というスレッドがあった。新規にmb_list_encodings_alias_names()という関数を追加したらしいのだが、既存のmb_list_encodings()とどう違うのかどうかという議論がわきおこっている。 ここでは、mb_list_encodings()を題材にどうやってphpの実装を理解していくか、そのプロセスを記述してみたい。もちろんこの方法がベストであるとか、この方法でなければいけないとか、いつでもこの方法が適用可能だなんてことを主張するつもりは一切ないが、一つの例として大規模ソフトウェアの微視的理解方法を理解いただきたい。 1) mb_list_encodingsがどこで利用されているかを知る。 $ cd /usr/src/php-5.1.4 $

  • 1