導航:首頁 > 信息系統 > 如何讓內核列印堆棧信息

如何讓內核列印堆棧信息

發布時間:2022-10-02 06:53:39

㈠ slf4j怎麼列印java錯誤堆棧信息throwable對象

SLF4J 1.6.0以前的版本,如果列印異常堆棧信息,必須用

log.error(Stringmsg,Throwablet)

log.info等對應方法.

如果msg含有變數,一般用String.format方法格式化msg.

如果用

error(Stringformat,Object...arguments)

等其它方法,異常堆棧信息會丟失.

幸好,SLF4J 1.6.0以後的版本對這個不友好的異常信息log改進了.

error(Stringformat,Object…arguments)這個方法也會列印異常堆棧信息,只不過規定throwable對象必須為

最後一個參數.如果不遵守這個規定,異常堆棧信息不會log出來.

㈡ 如何列印內核調用堆棧及函數名

static void
__report_bad_irq(unsigned int irq, struct irq_desc *desc,
irqreturn_t action_ret)
{
struct irqaction *action;

if (action_ret != IRQ_HANDLED && action_ret != IRQ_NONE) {
printk(KERN_ERR "irq event %d: bogus return value %x\n",
irq, action_ret);
} else {
printk(KERN_ERR "irq %d: nobody cared (try booting with "
"the \"irqpoll\" option)\n", irq);
}
mp_stack();
printk(KERN_ERR "handlers:\n");

action = desc->action;
while (action) {
printk(KERN_ERR "[<%p>]", action->handler);
print_symbol(" (%s)",
(unsigned long)action->handler);
printk("\n");
action = action->next;
}
}

==========================================================================================
irq 64: nobody cared (try booting with the "irqpoll" option)
Backtrace:
[<c0028940>] (mp_backtrace+0x0/0x104) from [<c0028a5c>] (mp_stack+0x18/0x1c)

r7:00000000 r6:00000040 r5:00000000 r4:c02dec10
[<c0028a44>] (mp_stack+0x0/0x1c) from [<c00692e0>] (__report_bad_irq+0x38/0x94
)
[<c00692a8>] (__report_bad_irq+0x0/0x94) from [<c00694a8>] (note_interrupt+0x16c
/0x1e0)
r4:c02dec10
[<c006933c>] (note_interrupt+0x0/0x1e0) from [<c0069fb4>] (handle_edge_irq+0x130
/0x150)
[<c0069e84>] (handle_edge_irq+0x0/0x150) from [<c002d98c>] (s3c_irq_demux_extint
8+0x94/0xa4)

㈢ 怎麼在log.error()裡面把e.printStackTrace的堆棧信息列印出來

log.error(this, e);
log.error(ClassName.class, e);
上面兩種都可。在靜態方法中時只能第二種方法。

樓上的e.toString()無法列印出堆棧的內容,只能打出異常的類型

㈣ linux內核崩潰的堆棧怎麼能取到或者有什麼好的調試方法

最簡單的方法:

在內核中,printk可以列印調試信息(用法同printf),你在加代碼之前,中,後都列印調試信息看看。

㈤ 怎麼讓程序異常退出時列印堆棧信息

列印堆棧是調試的常用方法,一般在系統異常時,我們可以將異常情況下的堆棧列印出來,這樣十分方便錯誤查找。實際上還有另外一個非常有用的功能:分析代碼的行為。android代碼太過龐大復雜了,完全的靜態分析經常是無從下手,因此通過列印堆棧的動態分析也十分必要。

Android列印堆棧的方法,簡單歸類一下
1. zygote的堆棧mp
實際上這個可以同時mp java線程及native線程的堆棧,對於java線程,java堆棧和native堆棧都可以得到。
使用方法很簡單,直接在adb shell或串口中輸入:
[plain] view plain
kill -3 <pid>
輸出的trace會保存在 /data/anr/traces.txt文件中。這個需要注意,如果沒有 /data/anr/這個目錄或/data/anr/traces.txt這個文件,需要手工創建一下,並設置好讀寫許可權。
如果需要在代碼中,更容易控制堆棧的輸出時機,可以用以下命令獲取zygote的core mp:
[java] view plain
Process.sendSignal(pid, Process.SIGNAL_QUIT);
原理和命令行是一樣的。
不過需要注意兩點:
adb shell可能會沒有許可權,需要root。
android 4.2中關閉了native thread的堆棧列印,詳見 dalvik/vm/Thread.cpp的mpNativeThread方法:
[cpp] view plain
dvmPrintDebugMessage(target,
"\"%s\" sysTid=%d nice=%d sched=%d/%d cgrp=%s\n",
name, tid, getpriority(PRIO_PROCESS, tid),
schedStats.policy, schedStats.priority, schedStats.group);
mpSchedStat(target, tid);
// Temporarily disabled collecting native stacks from non-Dalvik
// threads because sometimes they misbehave.
//dvmDumpNativeStack(target, tid);
Native堆棧的列印被關掉了!不過對於大多數情況,可以直接將這個注釋打開。

㈥ C 語言怎麼列印函數的調用堆棧

可以直接用輸出在函數內部調用時,把調用順序列印出來。 一、一個由C/C++編譯的程序佔用的內存分為以下幾個部分 1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於數據結構中的棧。

㈦ android 怎麼列印函數堆棧 java

C++也是支持異常處理的,異常處理庫中,已經包含了獲取backtrace的介面,Android也是利用這個介面來列印堆棧信息的。在Android的C++中,已經集成了一個工具類CallStack,在libutils.so中。

使用方法:

[cpp]viewplain
#include<utils/CallStack.h>
...
CallStackstack;
stack.update();
stack.mp();

使用方式比較簡單。目前Andoid4.2版本已經將相關信息解析的很到位,符號表查找,demangle,偏移位置校正都做好了。

㈧ c語言如何將函數調用堆棧列印出來

可以直接用輸出在函數內部調用時,把調用順序列印出來。

一、一個由C/C++編譯的程序佔用的內存分為以下幾個部分

1、棧區(stack)—由編譯器自動分配釋放,存放函數的參數值,局部變數的值等。其操作方式類似於數據結構中的棧。

2、堆區(heap)—一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。

3、全局區(靜態區)(static)—,全局變數和靜態變數的存儲是放在一塊的,初始化的全局變數和靜態變數在一塊區域,未初始化的全局變數和未初始化的靜態變數在相鄰的另一塊區域。-程序結束後有系統釋放

4、文字常量區—常量字元串就是放在這里的。程序結束後由系統釋放

5、程序代碼區—存放函數體的二進制代碼。


二、常式:

//main.cpp
inta=0;全局初始化區
char*p1;全局未初始化區
main()
{
intb;棧
chars[]="abc";棧
char*p2;棧
char*p3="123456";123456在常量區,p3在棧上。
staticintc=0;全局(靜態)初始化區
p1=(char*)malloc(10);
p2=(char*)malloc(20);
分配得來得10和20位元組的區域就在堆區。
strcpy(p1,"123456");123456放在常量區,編譯器可能會將它與p3所指向的"123456"優化成一個地方。
}
閱讀全文

與如何讓內核列印堆棧信息相關的資料

熱點內容
怎麼測量產品孔的角度 瀏覽:643
昆明的菜市場為什麼都關了 瀏覽:198
白天菜市場有什麼好吃的 瀏覽:38
什麼是攝影信息特性 瀏覽:428
遠洋市場帝王蟹多少錢 瀏覽:468
督促程序的范圍是什麼 瀏覽:699
康寶萊代理人一般多少錢 瀏覽:448
殖民地模擬器怎麼和商人交易 瀏覽:692
外匯交易平台哪裡學 瀏覽:850
如何把技術掌握在自己手裡 瀏覽:618
易代理怎麼開通供應商 瀏覽:473
杭州二手裝載機交易市場在哪裡 瀏覽:971
helloworld程序什麼意思 瀏覽:680
手指評殘程序如何走 瀏覽:834
代理台灣金門高粱酒怎麼樣 瀏覽:828
教育技術如何推動新時代創新 瀏覽:232
技術倉儲包括哪些 瀏覽:57
南寧市哪裡有批發花生市場 瀏覽:558
德州技術學校都有什麼專業 瀏覽:975
央視新聞直播帶貨有哪些產品 瀏覽:497