Help us understand the problem. What is going on with this article?

addr2lineを使った調査方法

More than 5 years have passed since last update.

概要

  • addr2lineコマンドを使用して、Cプログラムのsegmention faultを調査する

条件

  • linux限定

実験環境

  • ubuntu 12.10

コマンド概要

addr2line - アドレスをファイル名と行番号に変換する。
http://linuxjm.sourceforge.jp/html/GNU_binutils/man1/addr2line.1.html

手順

1.ターミナルの起動
2.環境変数の設定(バックトレース取得用)

export SEGFAULT_SIGNALS=all
export LD_PRELOAD=/lib/i386-linux-gnu/libSegFault.so

3.サンプルソースのダウンロード

git clone https://github.com/masayukioguni/segmentation-fault.git

4.ビルド

cd segmentation-fault; gcc -g -o main main.c

5.実行

./main

6.segmention fault発生

*** Segmentation fault
Register dump:

 EAX: 00000000   EBX: b7719000   ECX: bf902c34   EDX: bf902bc4
 ESI: 00000000   EDI: 00000000   EBP: bf902b88   ESP: bf902b60

 EIP: 0804841c   EFLAGS: 00210286

 CS: 0073   DS: 007b   ES: 007b   FS: 0000   GS: 0033   SS: 007b

 Trap: 0000000e   Error: 00000006   OldMask: 00000000
 ESP/signal: bf902b60   CR2: 00000000

 FPUCW: ffff037f   FPUSW: ffff0000   TAG: ffffffff
 IPOFF: 00000000   CSSEL: 0000   DATAOFF: 00000000   DATASEL: 0000

 ST(0) 0000 0000000000000000   ST(1) 0000 0000000000000000
 ST(2) 0000 0000000000000000   ST(3) 0000 0000000000000000
 ST(4) 0000 0000000000000000   ST(5) 0000 0000000000000000
 ST(6) 0000 0000000000000000   ST(7) 0000 0000000000000000

Backtrace:
./main[0x804841c] ***1***
./main[0x8048444]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb758c4d3]
./main[0x8048341]

Memory map:

08048000-08049000 r-xp 00000000 08:01 441864     /xxxx/xxxx/xxxx/segmentation-fault/main
08049000-0804a000 r--p 00000000 08:01 441864     /xxxx/xxxx/xxxx/segmentation-fault/main
0804a000-0804b000 rw-p 00001000 08:01 441864     /xxxx/xxxx/xxxx/segmentation-fault/main
08677000-08698000 rw-p 00000000 00:00 0          [heap]
b7553000-b756f000 r-xp 00000000 08:01 1049295    /lib/i386-linux-gnu/libgcc_s.so.1
b756f000-b7570000 r--p 0001b000 08:01 1049295    /lib/i386-linux-gnu/libgcc_s.so.1
b7570000-b7571000 rw-p 0001c000 08:01 1049295    /lib/i386-linux-gnu/libgcc_s.so.1
b7571000-b7573000 rw-p 00000000 00:00 0 
b7573000-b7716000 r-xp 00000000 08:01 1064634    /lib/i386-linux-gnu/libc-2.15.so
b7716000-b7717000 ---p 001a3000 08:01 1064634    /lib/i386-linux-gnu/libc-2.15.so
b7717000-b7719000 r--p 001a3000 08:01 1064634    /lib/i386-linux-gnu/libc-2.15.so
b7719000-b771a000 rw-p 001a5000 08:01 1064634    /lib/i386-linux-gnu/libc-2.15.so
b771a000-b771d000 rw-p 00000000 00:00 0 
b7731000-b7734000 r-xp 00000000 08:01 1088720    /lib/i386-linux-gnu/libSegFault.so
b7734000-b7735000 r--p 00002000 08:01 1088720    /lib/i386-linux-gnu/libSegFault.so
b7735000-b7736000 rw-p 00003000 08:01 1088720    /lib/i386-linux-gnu/libSegFault.so
b7736000-b7738000 rw-p 00000000 00:00 0 
b7738000-b7739000 r-xp 00000000 00:00 0          [vdso]
b7739000-b7759000 r-xp 00000000 08:01 1089542    /lib/i386-linux-gnu/ld-2.15.so
b7759000-b775a000 r--p 0001f000 08:01 1089542    /lib/i386-linux-gnu/ld-2.15.so
b775a000-b775b000 rw-p 00020000 08:01 1089542    /lib/i386-linux-gnu/ld-2.15.so
bf8e4000-bf905000 rw-p 00000000 00:00 0          [stack]
[1]    11555 segmentation fault (core dumped)  ./main

6.以下のコマンドを実行

addr2line -e main 0x804841c

7.ソースコードでsegmention faultが発生した位置が表示される
/xxxx/xxxx/xxxx/segmentation-fault/main.c:8

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away