Catch up with the original.
Submitted by: yoshiaki@kt.rim.or.jp and nao@tom-yam.or.jp
This commit is contained in:
parent
eb2ae16f67
commit
28564b67fc
@ -1,12 +1,12 @@
|
||||
<!-- $Id: kerneldebug.sgml,v 1.4 1997/02/22 13:01:21 peter Exp $ -->
|
||||
<!-- $Id: kerneldebug.sgml,v 1.5 1997/02/25 04:56:32 hanai Exp $ -->
|
||||
<!-- The FreeBSD Japanese Documentation Project -->
|
||||
<!-- Original revision: 1.12 -->
|
||||
<!-- Original revision: 1.13 -->
|
||||
|
||||
<chapt><heading>カーネルデバッグ<label id="kerneldebug"></heading>
|
||||
|
||||
<p><em>原作 &a.paul; and &a.joerg;</em>
|
||||
<p><em>訳: &a.yoshiaki;. <newline>
|
||||
2 November 1996. </em>
|
||||
18 March 1997. </em>
|
||||
|
||||
<sect><heading>kgdbによるカーネルのクラッシュダンプのデバッグ</heading>
|
||||
|
||||
@ -39,7 +39,9 @@
|
||||
カーネルデバッグモードで動かしていることを意味します. <tt>gdb</tt>を
|
||||
<tt>-k</tt>オプションをつけて起動するか <tt>kgdb</tt>という名前でリン
|
||||
クして起動することでこのモードになります. デフォルトでは このリンク
|
||||
は作られていません.</em>
|
||||
は作られていません. また, このアイデアは GNU関係者たちが彼らのツール
|
||||
を別の名前で呼び出した時に異なった動作をするということを好まない, と
|
||||
いう点で不評です. あるいは将来この機能を廃止することになるかもしれません. </em>
|
||||
|
||||
カーネルを作った時にそのコピーを <tt>kernel.debug</tt>という名前で作
|
||||
りましょう. また, オリジナルに対して <tt>strip -d</tt>を実行します.
|
||||
@ -409,6 +411,77 @@ char (ʸ
|
||||
カーネルのシングルステップ中にオンラインマニュアルを読むことは難しい
|
||||
ということを覚えておいてください.
|
||||
|
||||
<sect><heading>リモート GDB を使ったオンラインカーネルデバッグ</heading>
|
||||
|
||||
<p>この機能は FreeBSD 2.2 からサポートされました. これは本当にすばらし
|
||||
い機能です.
|
||||
|
||||
GDB はすでにかなり以前より <em/リモートデバッグ/ をサポートしてい
|
||||
ます. これはシリアル回線を使い非常に単純なプロトコルで行ないます.
|
||||
もちろん, この方法では今までに示した方法とは違い, 2台のマシンが必
|
||||
要になります. 1台はデバッグ環境のためのホストで, すべてのソースとす
|
||||
べてのシンボルを含んだバイナリのコピーを持っています. もう 1台は
|
||||
ターゲットマシンで, 同一のカーネルのコピー (ただしデバッグ情報は
|
||||
取り除いてあるもの) を単に実行するためのものです.
|
||||
|
||||
この場合, カーネルのコンフィグレーションは <tt>config -g</tt> で行な
|
||||
い, <em/DDB/ を含めなくてはなりません. そうして通常通りコンパイルし
|
||||
ます. こうして作ったバイナリファイルはデバッグ情報のために非常に大き
|
||||
くなります. このカーネルをターゲットマシンにコピーして
|
||||
<tt>strip -x</tt> でデバッグシンボルを取り除きます. そして <tt/-d/
|
||||
ブートオプションを使いブートします. ターゲットマシンの 1番目の
|
||||
シリアル回線をデバッグホストのいずれかのシリアル回線につないでおきま
|
||||
しょう. それからデバッグ(訳注:ホスト)マシン上で, ターゲットとなって
|
||||
いるカーネルのコンパイルディレクトリで gdb を起動します:
|
||||
|
||||
<tscreen><verb>
|
||||
% gdb -k kernel
|
||||
GDB is free software and you are welcome to 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.
|
||||
GDB 4.16 (i386-unknown-freebsd),
|
||||
Copyright 1996 Free Software Foundation, Inc...
|
||||
(kgdb)
|
||||
</verb></tscreen>
|
||||
|
||||
リモートデバッグセッションの初期化 (1番目のシリアルポートを使用する
|
||||
ことの設定) を以下のように行ないます.
|
||||
|
||||
<tscreen><verb>
|
||||
(kgdb) target remote /dev/cuaa0
|
||||
</verb></tscreen>
|
||||
|
||||
次にターゲットマシン (デバイスのプローブ直前で DDB に入っています)
|
||||
で次のように入力します:
|
||||
|
||||
<tscreen><verb>
|
||||
Debugger("Boot flags requested debugger")
|
||||
Stopped at Debugger+0x35: movb $0, edata+0x51bc
|
||||
db> gdb
|
||||
</verb></tscreen>
|
||||
|
||||
DDB は次のような出力を返すでしょう.
|
||||
<tscreen><verb>
|
||||
Next trap will enter GDB remote protocol mode
|
||||
</verb></tscreen>
|
||||
|
||||
``gdb''と入力するたびに リモート GDB とローカル DDB が交互に切り替わ
|
||||
ります. トラップをすぐに起こすために単に ``s'' (step) と入力して下
|
||||
さい. そうするとホストの GDB はターゲットのカーネルの制御を行なうよ
|
||||
うになります.
|
||||
|
||||
<tscreen><verb>
|
||||
Remote debugging using /dev/cuaa0
|
||||
Debugger (msg=0xf01b0383 "Boot flags requested debugger")
|
||||
at ../../i386/i386/db_interface.c:257
|
||||
(kgdb)
|
||||
</verb></tscreen>
|
||||
|
||||
このセッションではソースコードへのフルアクセスや Emacs の window 上
|
||||
の gud-mode (これは別の Emacs window に自動的にソースコードを表示し
|
||||
ます) で動かすなど, 通常の GDB セッションでできることのほとんどのこ
|
||||
とができます.
|
||||
|
||||
<sect><heading>コンソールドライバのデバッグ</heading>
|
||||
|
||||
<p>DDBを動かすためにはコンソールドライバが必要ですから, コンソールドラ
|
||||
|
Loading…
Reference in New Issue
Block a user