Search Results: tag:debug

11 件ヒットしました。 1 - 10 番目を表示しています。

C_language debug gdb malloc で確保した配列を一度に表示する

「@」でサイズを指定すればよい。

double *ptr = (double *) malloc(sizeof(double) * 5);

となっているような場合に gdb で

p ptr@5

とすると5個 double が表示される。

C_language debug glib を使ったプログラムを valgrind でメモリリークをチェックする

https://live.gnome.org/Valgrind にあるように G_SLICE と G_DEBUG の環境変数を設定するとよい。

G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind --leak-check=full --show-reachable=yes --log-file=valgrind.log ./a.out

C_language debug gdb ブレークポイントに条件をつける

まず、ブレークポイントを設定する。

b func

このブレークポイントに条件を加えるには、condition を使う。 ブレークポイントの番号が 1 だとすると、その番号を指定して

condition 1 val == 3

のようにして指定する。これは変数 val が 3 のときにプログラムが停止する。

C_language debug gdb ブレークポイントを削除する

まず、ブレークポイントの一覧を

info breakpoints

で表示し、ブレークポイントの番号を確認する。 delete で削除したいブレークポイントの番号を指定して削除する。

delete 3

C_language debug gdb バックトレースを表示する

まず、Ubuntu 11.10 だと coredumpsize が 0 になっている。 デバッグのためには

limit coredumpsize 10000

のように指定して core ファイルが作成されるようにする。

そして gdb を使えばバックトレースを表示できる。 コンパイル時にgccに-gオプションをつけた場合はファイル名と行番号も表示される。

gdb a.out core

また、glibc に含まれる backtrace() と backtrace_symbols_fd() を使うと 実行中のCプログラムのバックトレースを表示することができる。 詳細はglibcのマニュアルを参照。

C_language debug gdb libtool で gdb を使う

普通に

gdb ./prog

のようにやってもうまくいかない。

libtool --mode=execute gdb ./prog

のように libtool を使って実行する。

C_language debug gcc で警告を(多く)表示させるオプション

gcc -Wall -Wextra -Wformat=2 -Wstrict-aliasing=2 -Wcast-qual \
  -Wcast-align -Wconversion -Wfloat-equal -Wpointer-arith -Wswitch-enum foo.c

C_language debug valgrind でメモリリーク、メモリの不正アクセスを検出する

メモリリーク、メモリの不正アクセスの検出に valgrind を使用する。

ruby の拡張ライブラリに対しては実行するには

valgrind -v --error-limit=no --partial-loads-ok=yes --undef-value-errors=no \
  ruby test.rb 2>&1 | tee valgrind.log

などとする。

C_language debug C言語のプロファイルを実行する

gprof を使うには

gcc -pg -o foo foo.c

のように -pg オプションをつける。

そして、コンパイルしてできた foo を実行すると gmon.out というファイルができる。

gprof ./foo

とする。

C_language debug プロファイルで libtool と gprof を使う

libtool を使った ./prog に対して gprof でプロファイルを行うには

libtool --mode=execute gprof ./prog

とする。