Re: debugging kernel threads

看板DFBSD_kernel作者時間21年前 (2005/01/27 02:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/5 (看更多)
At Wed, 26 Jan 2005 10:52:45 +0100, Richard Nyberg wrote: > > I often use gdb's proc command to switch between different processes > when debugging kernel cores. Now I want to debug a kernel thread > and it doesn't seem to work. Does anyone know how to switch to a > kernel thread? Maybe proc could be tweaked to work for threads too. > Replying to myself... I RTFS and it looked like proc should work with kernel threads. The problem seems to be that the threads td_pcb is invalid. Example: (kgdb) psx .... 0 -1 c121d600 00000e00 vnlru c121d600 vlruwt .... (kgdb) p *((struct thread*)0xc121d600)->td_pcb $11 = {pcb_cr3 = 0, pcb_edi = 0, pcb_esi = -1071893984, pcb_ebp = 0, pcb_esp = 0, pcb_ebx = 0, pcb_eip = 0, pcb_dr0 = 0, pcb_dr1 = 0, pcb_dr2 = 0, pcb_dr3 = 0, pcb_dr6 = 0, pcb_dr7 = 0, pcb_ldt = 0x0, pcb_save = {sv_87 = {sv_env = {en_cw = 0, en_sw = 0, en_tw = 0, en_fip = 0, en_fcs = 0, en_opcode = 0, en_foo = 0, en_fos = 0}, sv_ac = {{ fp_bytes = "\000\000\000\000\000\000\000\000\000"}, { fp_bytes = "\000\000\000\000\000\000\000\000\000"}, { fp_bytes = "\000\000\000\000\000\000\000\000\000"}, { fp_bytes = "\000\000\000\000\000\000\000\000\000"}, { fp_bytes = "\000\000\000\000\000\000\000\000\000"}, { fp_bytes = "\000\000\000\000\000\000\000\000\000"}, { fp_bytes = "\000\000\000\000\000\000\000\000\000"}, { fp_bytes = "\000\000\000\000\000\000\000\000\000"}}, sv_ex_sw = 0, sv_pad = '\0' <repeats 63 times>}, sv_xmm = {sv_env = {en_cw = 0, en_sw = 0, en_tw = 0, en_opcode = 0, en_fip = 0, en_fcs = 0, en_pad0 = 0, en_foo = 0, en_fos = 0, en_pad1 = 0, en_mxcsr = 0, en_pad2 = 0}, sv_fp = {{fp_acc = { fp_bytes = "\000\000\000\000\000\000\000\000\000"}, fp_pad = "\000\000\000\000\000"}, {fp_acc = { fp_bytes = "\000\000\000\000\000\000\000\000\000"}, fp_pad = "\000\000\000\000\000"}, {fp_acc = { fp_bytes = "\000\000\000\000\000\000\000\000\000"}, fp_pad = "\000\000\000\000\000"}, {fp_acc = { fp_bytes = "\000\000\000\000\000\000\000\000\000"}, fp_pad = "\000\000\000\000\000"}}, sv_xmm = {{ xmm_bytes = '\0' <repeats 15 times>}, { xmm_bytes = '\0' <repeats 15 times>}, { xmm_bytes = '\0' <repeats 15 times>}, { xmm_bytes = '\0' <repeats 15 times>}, { xmm_bytes = '\0' <repeats 15 times>}, { xmm_bytes = '\0' <repeats 15 times>}, { xmm_bytes = '\0' <repeats 15 times>}, { xmm_bytes = '\0' <repeats 15 times>}}, sv_ex_sw = 0, sv_pad = '\0' <repeats 219 times>}}, pcb_flags = 0 '\0', pcb_onfault = 0x0, pcb_gs = 0, pcb_ext = 0x0, __pcb_spare = {0, 0, 0}} A random selection of other threads shows similarly broken pcb's. -Richard
文章代碼(AID): #11zziN00 (DFBSD_kernel)
文章代碼(AID): #11zziN00 (DFBSD_kernel)