あなたは、UNIX システムがどのように機能するかについて根本的に理解していないようです。
考えてみてください。たとえば、システム コールを実装するカーネル関数にステップ インできたとしますsys_open
。これsys_open
で、デバッガーでのカーネル ソースが表示されます。問題は、その時点でカーネルが実行されているか、それとも停止しているかです。デバッガーでのようなことをしたいので、カーネルが停止しnext
ていると仮定しましょう。
では、n
キーを押すとどうなりますか?
通常、カーネルはキーボードによって発生した割り込みに反応し、押されたキーを特定し、そのキーを適切なプロセス (read(2)
キーボードを制御する端末からブロックされているプロセス) に送信します。
ただし、カーネルは停止しているため、キーを押す必要はありません。
結論: 同じマシンで実行されているデバッガーを介してカーネルをデバッグすることは不可能です。
実際、カーネルをデバッグするときは、通常、別のマシンでデバッガーを実行して実行します (これをリモート デバッグと呼びます)。
本当にカーネルにステップインしたい場合、それを行う最も簡単な方法はUMLを使用することです。
UML で遊んで、ユーザー空間/カーネル インターフェイスがどのように機能し、相互作用するかを理解したら、 を試すことができkgdb
ますが、セットアップは通常もう少し複雑です。このために別のマシンを実際に用意する必要はありません。VMWare、VirtualPC、または VirtualBox を使用できます。