dump_stack 和 trigger_all_cpu_backtrace

299 篇文章
本文介绍了Linux内核中用于显示堆栈回溯的`dump_trace`函数及其相关联的`show_trace`和`trigger_all_cpu_backtrace`。`dump_trace`函数用于跟踪单个CPU的堆栈,而`trigger_all_cpu_backtrace`则会触发所有CPU进行回溯。`print_trace_address`用于打印地址和符号信息。整个过程涉及到了任务结构、寄存器、堆栈指针以及中断处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

182 /* 
183  * The architecture-independent dump_stack generator
184  */
185 void dump_stack(void)     
186 {  
187     unsigned long bp;     
188     unsigned long stack;  
189                           
190     bp = stack_frame(current, NULL); //在这边得到当前进程的 bp 值。
191     printk("Pid: %d, comm: %.20s %s %s %.*s\n",
192         current->pid, current->comm, print_tainted(),
193         init_utsname()->release,       
194         (int)strcspn(init_utsname()->versi
[ 37.930000] BUG: scheduling while atomic: swapper/0/0x40000102 [ 37.930000] Modules linked in: [ 37.940000] CPU: 0 PID: 0 Comm: swapper Not tainted 3.10.108+ #40 [ 37.940000] Backtrace: [ 37.940000] [<c0011f44>] (dump_backtrace+0x0/0x10c) from [<c0012158>] (show_stack+0x18/0x1c) [ 37.950000] r6:c0492018 r5:c04a21b8 r4:00000000 r3:00000000 [ 37.960000] [<c0012140>] (show_stack+0x0/0x1c) from [<c036ce84>] (dump_stack+0x20/0x28) [ 37.970000] [<c036ce64>] (dump_stack+0x0/0x28) from [<c036a41c>] (__schedule_bug+0x4c/0x64) [ 37.980000] [<c036a3d0>] (__schedule_bug+0x0/0x64) from [<c036f784>] (__schedule+0x408/0x480) [ 37.980000] r4:c049c678 r3:00000000 [ 37.990000] [<c036f37c>] (__schedule+0x0/0x480) from [<c0046bb4>] (__cond_resched+0x28/0x38) [ 38.000000] [<c0046b8c>] (__cond_resched+0x0/0x38) from [<c036feb0>] (_cond_resched+0x40/0x48) [ 38.000000] r4:c39b8c4c r3:00000101 [ 38.010000] [<c036fe70>] (_cond_resched+0x0/0x48) from [<c0272c74>] (nuc970_poll+0x238/0x308) [ 38.020000] [<c0272a3c>] (nuc970_poll+0x0/0x308) from [<c02b09dc>] (net_rx_action+0xbc/0x1e8) [ 38.030000] [<c02b0920>] (net_rx_action+0x0/0x1e8) from [<c0024dec>] (__do_softirq+0xdc/0x1d8) [ 38.030000] [<c0024d10>] (__do_softirq+0x0/0x1d8) from [<c0024fd0>] (do_softirq+0x54/0x60) [ 38.040000] [<c0024f7c>] (do_softirq+0x0/0x60) from [<c0025240>] (irq_exit+0x5c/0x9c) [ 38.050000] r4:c04bb908 r3:00000008 [ 38.050000] [<c00251e4>] (irq_exit+0x0/0x9c) from [<c000fb64>] (handle_IRQ+0x3c/0x8c) [ 38.060000] r4:c04bb908 r3:00000000 [ 38.060000] [<c000fb28>] (handle_IRQ+0x0/0x8c) from [<c0008410>] (asm_do_IRQ+0x10/0x14) [ 38.070000] r6:f0000000 r5:60000013 r4:c000fd20 r3:c000fd28 [ 38.080000] [<c0008400>] (asm_do_IRQ+0x0/0x14) from [<c000e870>] (__irq_svc+0x30/0x74) [ 38.090000] Exception stack(0xc0493f30 to 0xc0493f78) [ 38.090000] 3f20: 00000000 0005317f 0005217f 60000013 [ 38.100000] 3f40: c0492000 c0492000 c049a074 c0492000 c04cb6ee c04cb6ee 00465d64 c0493f84 [ 38.110000] 3f60: 600000d3 c0493f78 c000fd28 c000fd20 60000013 ffffffff [ 38.110000] [<c000fcf4>] (arch_cpu_idle+0x0/0x3c) from [<c004e0ec>] (cpu_startup_entry+0xbc/0x108) [ 38.120000] [<c004e030>] (cpu_startup_entry+0x0/0x108) from [<c0369728>] (rest_init+0x78/0x90) [ 38.130000] r7:c049a000 r3:c0372dcc [ 38.140000] [<c03696b0>] (rest_init+0x0/0x90) from [<c044ba20>] (start_kernel+0x27c/0x2c8) [ 38.140000] r4:c049a0e0 r3:00000000 [ 38.150000] [<c044b7a4>] (start_kernel+0x0/0x2c8) from [<00008040>] (0x8040) 分析一下
最新发布
07-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值