2017-03-15 18 views
3

私は大学院のオペレーティングシステムクラスに属しています。私たちはQEMUを使ってカーネルをエミュレートし、gdbを使ってデバッグしています。デバッグは今まではまっすぐに進められてきました。私はQEMUで実行している他のCPUにgdbをどのように接続できますか?GDBを使用してSMP(対称型マルチプロセッサ)でQEMUをデバッグする方法は?

私たちのmakefileを使うと、ある端末で "make qemu-nox"または "make qemu-nox-gdb"を使ってqemuを起動することができ、後者を使用した場合はgdb "(同じディレクトリ内の)別の端末にあります。したがって、同じQEMUに接続する方法はわかりませんが、別のプロセッサ(今は合計4台で実行しています)に接続します。

答えて

4

各qemu CPUは、gdb内の別のスレッドとして表示されます。別のCPUの状態を調べるには、threadコマンドを使用してCPUを切り替えます。

(gdb) info thread 
    Id Target Id   Frame 
* 1 Thread 1 (CPU#0 [running]) 0x80105163 in stosl (addr=0x89c3e000, data=16843009, cnt=1024) at x86.h:44 
    2 Thread 2 (CPU#1 [halted ]) halt() at x86.h:127 
    3 Thread 3 (CPU#2 [halted ]) halt() at x86.h:127 
    4 Thread 4 (CPU#3 [halted ]) halt() at x86.h:127 

(gdb) where 
#0 0x80105163 in stosl (addr=0x89c3e000, data=16843009, cnt=1024) at x86.h:44 
#1 0x801051bf in memset (dst=0x89c3e000, c=1, n=4096) at string.c:8 
#2 0x80102b5a in kfree (v=0x89c3e000 "\001\001\001\001") at kalloc.c:63 
#3 0x80102af4 in freerange (vstart=0x80400000, vend=0x8e000000) at kalloc.c:47 
#4 0x80102ac1 in kinit2 (vstart=0x80400000, vend=0x8e000000) at kalloc.c:38 
#5 0x8010386a in main() at main.c:37 

(gdb) thread 3 
[Switching to thread 3 (Thread 3)] 
#0 halt() at x86.h:127 
127 } 

(gdb) where 
#0 halt() at x86.h:127 
#1 0x80104aeb in scheduler() at proc.c:288 
#2 0x801038f6 in mpmain() at main.c:59 
#3 0x801038b0 in mpenter() at main.c:50 
#4 0x0000705a in ??() 
+0

ありがとう、これは私が望んでいた非常に単純で明白な答えです... – vasia

関連する問題