タグ

GDBに関するodawaraのブックマーク (35)

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

    odawara
    odawara 2010/01/11
  • GDBで歴史をさかのぼれるように!なりました! GDB 7.0 の新機能Reverse Debuggingを使ってみた - 日記を書く [・w・] はやみずさん

    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で歴史をさかのぼれるように!なりました! GDB 7.0 の新機能Reverse Debuggingを使ってみた - 日記を書く [・w・] はやみずさん
    odawara
    odawara 2009/10/03
  • Omicron Linux/LKM/GDBを使ってコードを追っかける

    Linux/GDBを使ってコードを追っかける」のカーネルモジュール編 gdb vmlinux /proc/kcore では、カーネルモジュールのシンボルが読み込まれないので、gdbが起動した後にadd-symbol-fileコマンドを使ってシンボルを読み込む必要がある。ただし、単純に (gdb) add-symbol-file net/ipv4/tcp_cubic.o としても、相対アドレスなので、使えない。そこで、.text、.dataセクションなどの先頭番地をgdbに教える必要がある。これらのアドレスは、/sys/module/モジュール名/sections/以下のファイルを見ればわかる。 # ls /sys/module/tcp_cubic/sections/ . .data .gnu.linkonce.this_module .strtab __param .. .data.re

  • gdbでメモリダンプして構造体を発見するTips - I am Cruby!

    gdb知りたい構造体が見たくても見れない場合に便利。例えば、デバッグシンボルがないバイナリ内でSEGVしている場合など。*1 こんなコードを用意してみた。特徴コンパイルは-gなしhg->comment = "Hellow!" だとSEGVが発生  #include #include struct hoge { int id; char *comment; }; void throw_segv(char *comment) { int test[1000]; if(!strcmp(comment, "Hellow!")) test[-100000] = 9; } int main(void) { struct hoge *hg; hg = malloc(sizeof(struct hoge)); hg->id = 2565; hg->comment = "Hellow!"; throw_

    odawara
    odawara 2009/05/14
  • ukai's blog

    11月30日はGo Conference 2014 autumnに参加してきました。 @yamotongpooさんに11月はじめくらいに、「今度はRob Pike氏をよびますよ」と聞いて すごいと思っていたら、すぐあとくらいに@tenntennさんから、「キーノートを2立てにして、片方を日の方にということで キーノートおねがいします」という依頼がきて、Rob Pike氏と並んでキーノートなんかできるかなとややたじろぎましたが、こういうのは断るよりやっておいたほうがいい経験に なるだろうと思って具体的な内容を考えるのは後回しにして引き受けました。*1 「日にフォーカスした話や日のユーザがこれからGoをやっていこう!となるような内容がよいかなと思います」とのことだったので、どんな内容にするかしばらく考えていたのですが、 ふとblogを見直すとちょうど一年位前にGo Readabilit

    odawara
    odawara 2009/04/20
  • 既に起動しているプロセスをgdbで制御する:Geekなぺーじ

    デバッグやテストを行っていると、プログラムが無限ループに入り込んで返ってこないような状況が発生することがあります。 そのバグが再現の難しいものであれば「gdbを使って起動しとけば良かった。。。」というような気分になる時があります。 しかし、gdbには既に起動しているプログラムの制御を横から奪い取ってデバッグするというありがたい機能があります。 ここでは、既に起動しているプログラムをgdbでいじる方法を説明したいと思います。 実際にデバッグをする方法を説明するというよりは、gdbで動いているプロセスにアタッチする例を説明します。 その後のデバッグに関しては、いつものgdbの使い方をしていただければ大丈夫です。 とりあえずアタッチしてみる 既に起動しているプロセスをgdbを解析するのは非常に簡単です。 単にgdbでプロセスにアタッチするだけです。 gdbでプロセスにアタッチする方法は2つありま

    odawara
    odawara 2009/01/04
  • Debugging with GDB - データの検査

    ユーザ・プログラムの中のデータを調べる通常の方法は、 printコマンド (省略形はp)、 またはそれと同義のコマンドである inspectコマンドを使用することです。 これは、 ユーザ・プログラムが記述された言語 (異なる言語の使用を参照) による式を評価し、 その値を出力するものです。 print exp print /f exp expは (ソース言語による) 式です。 デフォルトでは、 expの値は、 expのデータ型にとって適切な形式で表示されます。 `/f'を指定することで、 他の形式を選択することも可能です。 `/f'のfは形式を指定する文字です。 出力フォーマットを参照。 print print /f expを省略すると、 GDBは値ヒストリ (値ヒストリを参照) の最後の値を再表示します。 これは、 同じ値を異なる形式で調べるのに便利です。 データを調べるためのより低レベ

    odawara
    odawara 2008/06/25
  • GDB

    GDBの使い方を調べてみた.将来的にはデバッガを使えるようになって効率的な開発をしていくのだ. 入門編 応用編 GDBじゃないけど…… 入門編 基的なGDBの使い方 とにかくちょっと使ってみる 2003-07-20T15:13+09:00 matsu gdbをとにかくちょっと使ってみた. breakポイント 2003-07-20T15:13+09:00 matsu おそらく多くのデバッグ作業はbreakポイントとステップ実行で足りるものではないだろうか.ここではbreakポイントの設定方法を中心に記述する.breakポイントはいろんな方法で指定できるようだ. watch 2003-07-20T15:13+09:00 matsu 変数値の変化を追跡できるとうれしいかもしれない. continueとステップ実行 2003-07-20T15:13+09:00 matsu breakした後処理を

    odawara
    odawara 2008/06/22
  • Segmentation Fault の調べ方

    プログラムを書いていると,Segmentation fault や Bus error に なってしまうことがよくあります.このようなエラーの原因はどのようにして 探ればよいのでしょうか? 例えば,このようなプログラムがあります. #include <stdio.h> #define MAX 10 int main(){ int *p; int buf[MAX]; int i; p=buf; for(i=0; i<=MAX/2; i++){ buf[i*2+1]=0; } printf("%d\n", *p); return 0; } これは配列 buf の添字が奇数であるものに 0 を代入します。 また、ポインタ変数 p は配列 buf の先頭要素 を指し、プログラムの最後に先頭要素を表示させています。 ところが,これを実行すると Segmentation fault になります。 $

    odawara
    odawara 2008/06/22
  • GDBこまんど

    GDBを起動させるには、コマンドプロンプト上で gdb progname gdb : gdbを起動させるコマンド progname : デバッグするプログラムの名前 とすることで起動できる。 このとき、デバッグしたいプログラムがカレントディレクトリにない場合は、そのプログラムがある場所までのパスも記述すること。 GDB上でプログラムを走らせる(実行する)には run args... run : GDBを起動させるときに選択したプログラムを実行する args : プログラムに渡す引数(ない場合は指定しなくてもよい) ... : 引数が複数指定可能であることを示している。プログラムに必要な数だけ指定すること とすると実行することができる。 エラーなくプログラムが終了するとproglam sacseccefle とメッセージが出る。 以上がGDBの起動とプログラムの実行に使用するコマンドです。

    odawara
    odawara 2008/06/22
  • ダンプされたcoreを元にエラー原因を解析する方法 - Hello, world! - s21g

    Railsアプリを書いてる場合はあまり関係ないですが、 セグメンテーションエラー(SEGV)などに遭遇した場合に、 原因を調査する方法を紹介します。 まずは、coreを吐かせるためにulimitの設定をします。

    odawara
    odawara 2008/04/07
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    odawara
    odawara 2008/04/07
  • 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++)

    odawara
    odawara 2008/04/07
  • gdb 関数呼び出し backtrace - Google 検索

    この状態で、backtraceコマンドを実行することによって、関数の呼び出し元を全てトレースすることができます。 (gdb) backtrace #0 factorial (n=1) at factorial.c:21 ...

  • 為せばNaruto - gdbの見える化 - イントロダクション , 必要なもの , Emacs 22 のインストール方法 , 設定 , , gdbの見える化?! , , , , 利点 , バグ? , おまけ ..

    [ もしかしたら関連するかもしれないページ ] _ イントロダクション Emacs で GDB を もっと便利に使おう。 元ネタはNetBSD Meeting 19th (株)絹 藤原さんの発表より。 http://www.ki.nu/~makoto/e/emacs-gdb.pdf _ 必要なもの Emacs 22 _ Emacs 22 のインストール方法 CVS レポジトリからソースを取得して、コンパイルを行う。 % setenv CVS_RSH ssh (又は export CVS_RSH=ssh) % cvs -d:pserver:anonymous@cvs.sv.gnu.org:/sources/emacs login % cvs -d:pserver:anonymous@cvs.sv.gnu.org:/sources/emacs co emacs % cd emacs % ./c

  • いやなブログ: 普通のやつらの下を行け: ptrace で実行中のプロセスにちょっかいを出す

    普通のやつらの下を行け: ptrace で実行中のプロセスにちょっかいを出す Linux などの多くの Unix 的なOS には ptrace というシステムコールがあります。 ptrace を使うと実行中のプロセスに対して、レジスタの書き換えやメモリ上のデータの書き換えといったさまざまな操作を行うことができます。 普通のやつらの下を行けの第6回として、今回は ptrace を使って実行中のプロセスにちょっかいを出す方法を取り上げたいと思います。 ptrace とは デバッガの理論と実装 に次のような記述があります。 Unix の ptrace() は物のデバッガ API (アプリケーションプログラムインターフェイス) の一例であり、商品に相応しい品質を持ったデバッガをサポートするために設計された、最初の専用 API の1つである。 ptrace はデバッガ用に作られた API のようで

  • gdbserver step wrong - Google 検索

    2017/12/05 · It seems that a wrong implementation/usage of gdbserver's 'G' (write registers) is the issue. Currently looking into this. For reference, ...

  • gdbserver and gdb cross debug?

  • Debugging with GDB - シンボル・テーブルの検査

    odawara
    odawara 2006/10/24
  • Debugging with GDB - Table of Contents

    The GNU Source-Level Debugger Seventh Edition, for GDB version 4.18 February 1999 Richard M. Stallman and Roland H. Pesch GDBの要約 フリー・ソフトウェア GDBに貢献した人々 GDBセッションのサンプル GDBの起動・終了 GDBの起動 ファイルの選択 モードの選択 GDBの終了 シェル・コマンド GDB コマンド コマンドの構文 コマンド名の補完 ヘルプの表示 GDB配下でのプログラムの実行 デバッグのためのコンパイル ユーザ・プログラムの起動 ユーザ・プログラムの引数 ユーザ・プログラムの環境 ユーザ・プログラムの作業ディレクトリ ユーザ・プログラムの入出力 既に実行中のプロセスのデバッグ 子プロセスの終了 プロセス情報 マルチスレッド・プログラムのデバッグ マ

    odawara
    odawara 2006/10/24