デバッガ

システム・プログラム

                                       電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/syspro-2000/2000-04-17
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html

■デバッガ

◆dbx

使い方。cc に -g オプションを付けてコンパイルする。
% cc -g ファイル名.c -o 実行形式 [←]
% dbx 実行形式 [←]
良く使うコマンド。
run {引数}
実行
list {行番号}
ソース・プログラムの表示
where
バックトレース
up
関数呼び出しで1つ上(mainに近い方)へ移動
down
関数呼び出しで1つ下(mainに遠い方)へ移動
print 式
表示
next
1行実行。手続き呼び出しがあっても次の行。
step
1行実行。ただし、手続き呼び出しがあると、その手続きの中に入る。
stop at 行番号
その行にブレーク・ポイントの設定
stop in 関数名
その関数にブレーク・ポイントの設定
cont
実行再開。
status
ブレーク・ポイントの表示
delete 番号
ブレーク・ポイントの解除
call 関数(引数)
関数呼び出し。インタプリタ感覚。
func 関数
注目する関数の切り替え
file ファイル名
注目するファイルの切り替え
くわしくは、dbx を実行して help。man dbx。

◆xdbx

X Window のインタフェース。
% xdbx 実行形式 & [←]
% []
残念ながら、SGI では今の所動かない。

◆mule ESC x dbx

Mule の中から dbx を呼ぶ。ソース・プログラム上でどこを実行しているかを 追うことができる。 使い方。
  1. mule を実行する。
  2. ESC x dbx リターン」と打つ。
  3. dbx 実行形式 リターン」と打つ。
dbx のウィンドウでよく使うキー
C-c C-n
next
C-c C-s
step
C-c C-l
ウィンドウを割って、ソースの表示
ソース・プログラムのウィンドウで使えるキー
C-x SPC
ブレーク・ポイントの設定。(現在、残念ながら使えない。誰か修理して欲しい。)

◆gdb

GNU プロジェクトによるデバッガ。 使い方。cc に -g オプションを付けてコンパイルする。
% cc -g ファイル名.c -o 実行形式 [←]
% gdb 実行形式 [←]

良く使うコマンド。

run {引数}
実行
list {行番号{,行番号}}
ソース・プログラムの表示
bt
バックトレース
print 式
表示
x 式
表示
next
1行実行。手続き呼び出しがあっても次の行。
step
1行実行。ただし、手続き呼び出しがあると、その手続きの中に入る。
b 行番号 (break)
その行にブレーク・ポイントの設定
b 関数名 (break)
その関数にブレーク・ポイントの設定
cont (c)
実行再開。
info b
ブレーク・ポイントの表示
delete 番号
ブレーク・ポイントの解除
call 関数(引数)
関数呼び出し。インタプリタ感覚。
くわしくは、gdb を実行して help。 mule を実行して ESC x info で gdbの項目を見る(まだ入っていない)。

◆xxgdb

X Window のインタフェース。
% xxgdb 実行形式 & [←]
% []
xgdb ではなく、xxgdb。x が2回。

◆mule ESC x gdb

Mule の中から gdb を呼ぶ。ソース・プログラム上でどこを実行しているかを 追うことができる。 使い方。
  1. mule を実行する。
  2. ESC x gdb リターン」と打つ。
  3. gdb 実行形式 リターン」と打つ。
gdb のウィンドウでよく使うキー
C-c C-n
next
C-c C-s
step
C-c C-l
ウィンドウを割って、ソースの表示
ソース・プログラムのウィンドウで使えるキー
C-x SPC
ブレーク・ポイントの設定。(こちらは使える。)

■segmentaton fault(segmentaton violation)


----------------------------------------------------------------------
   1:	/*
   2:	        segv.c -- segmentation violation を起こすプログラム
   3:	        ~yas/syspro1/cc/segv.c
   4:	        $Header$
   5:	        Start: 1998/04/20 23:56:19
   6:	*/
   7:	#include <stdlib.h>
   8:	
   9:	main()
  10:	{
  11:	    char *p ;
  12:	        strcpy(p,"hello");
  13:	        printf("%s\n",p);
  14:	}
----------------------------------------------------------------------

実行例。
----------------------------------------------------------------------
% make segv
cc     segv.c   -o segv
% ./segv
Segmentation fault (core dumped)
% echo $LANG
ja_JP.EUC
% file core
core:           IRIX コア・ダンプ of 'segv'
% ls -l core
-rw-r--r--    1 yas      lab          512   4月 20日 23時58分  core
%  cc -g segv.c -o segv
% dbx segv
dbx version 7.2 Aug 29 1997 03:27:55
core is an incomplete corefile
Executable /home/lab2/OS/yas/syspro1-1998/cc/segv
(dbx) run
Process 26541 (segv) started
Process 26541 (segv) stopped on signal SIGSEGV: Segmentation violation (default)
 at [strcpy:123 ,0xfa6a1c0]
         Source (of strcpy.s) not available for Process 26541
(dbx) where
>  0 strcpy(0xfb68d04, 0x10001000, 0x7fff2f4c, 0x7fff2f4c) ["strcpy.s":123, 0xfa
6a1c0]
   1 main() ["/home/lab2/OS/yas/syspro1-1998/cc/segv.c":12, 0x4009c4]
   2 __istart() ["crt1tinit.s":13, 0x400960]
(dbx) list

         Source (of strcpy.s) not available for Process 26541
(dbx) up
main:  12  strcpy(p,"hello");
(dbx) list
    13          printf("%s\n",p);
    14  }
(dbx) 
----------------------------------------------------------------------

★練習問題

★練習問題10 デバッガ

cc -g で作ったプログラムを、dbx または gdb を使って実行しなさい。デバッ ガのコマンド実行してみなさい。

★練習問題11 Segmentation fault

Segmentation fault を起こすプログラムをかきなさい。 それをデバッガで追跡して、どこで起きたかを調べてなさい。
↑[もどる] ・[4月17日] →[4月24日]
Last updated: 2000/04/16 20:05:48
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>