VineLinuxパフォーマンスアッププロジェクト:0139

■自作プログラムの実行時デバッグ処理法■

 一般のユーザが普通あまりプログラムを作成することはないと思いますが、自作したプログラムを実行させる際に便利なデバッガ(修正処理を助けてくれるツール)があります。



 C言語やC++言語(Javaは未確認です)などで作成した自作プログラムを実行させるとき、誰でも一度は経験する「セグメンテーション違反」エラー。これが厄介なエラーで、プログラム内のどの部分がおかしいのか教えてくれず、自力で探し出すしかありません。

 しかしVineLinuxにはそんな時に便利な(?)ツールが用意されています。その名はgdbコマンド。デフォルトではインストールされていませんので、別途VinePlusよりダウンロードしてインストールする必要があります。

  apt-get install gdb
  またはダウンロード後、
  rpm -ivh gdb-XXXXX.i386.rpm(←XXXXXはバージョン番号)

などで行ってください。

 実際に使用する(デバッグ処理を行う)場合には修正したいプログラムのあるディレクトリまで移動してgdbコマンドを実行します。まず、

  gdb 修正したいファイル名

 かあるいはgdbと単に入力します。すると以下のような記述がターミナル上に表示されますので、この後にrunと入力してください(gdb起動時にプログラム名を指定していないときはrunの後にプログラム名と実行時引数があればそれらを追加して入力ください)

 GNU gdb 5.2.1
 Copyright 2002 Free Software Foundation, Inc.
 GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions.
 Type "show copying" to see the conditions.
 There is absolutely no warranty for GDB. Type "show warranty" for details.
 This GDB was configured as "i386-vine-linux-gnu".
 (gdb)
run

セグメンテーション違反の場合、以下のようにエラーが出ます(プログラム/home/abc/test/overflowを実行させた場合)。
 Starting program: /home/abc/test/overflow
 (no debugging symbols found)...(no debugging symbols found)...
 Program received signal SIGSEGV, Segmentation fault.
 0x08048375 in main ()

詳しいエラー状況を調べるにはwhereと入力します。

 (gdb) where
 #0 0x08048375 in main ()
 #1 0x00000001 in ?? ()
 Cannot access memory at address 0x1


終了するにはquitと入力します。

 (gdb) quit
 The program is running. Exit anyway? (y or n) y
 (←ここでyと押すと終了する)

 私もまだ詳しい使い方は知りませんが、オンラインマニュアル等が参考になると思います。




プロジェクト ホームへ戻る