中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android native HAL程序 java程序 linux kernel打印調用棧的方法

發布時間:2020-07-20 14:13:55 來源:網絡 閱讀:1090 作者:GaoNeil 欄目:移動開發

android native HAL程序 java程序 linux kernel打印調用棧的方法

關于android java打出調用棧的方法

1)方法一:
refs:frameworks/base/services/java/com/android/server/ActivityManagerService.java
startProcessLocked()
{
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, “amProcessStart”); /// M: Add for LCA launch time debug

Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); /// M: Add for LCA launch time debug
}

2)方法二:
catch (RemoteException e) {
e.printStackTrace();

}

3)方法三:
Log.d(TAG,Log.getStackTraceString(new Throwable()));

需要在java中
import android.util.Log;
import android.util.Slog;

4)方法四:
運行時堆棧打印:【debuggerd的堆棧dump】
debuggerd -b
輸出:
/data/tombstone/

android打印出native棧的方法

1)舊版本android的方法:
頭文件:
#include <corkscrew/backtrace.h> // system/core/include/corkscrew/backtrace.h

在 Android.mk 中還需要加入:
LOCAL_SHARED_LIBRARIES += libcorkscrew

實現:
void AudioMachineDevice::Dump_Backtrace(char* logtag, int32_t ignoreDepth, int32_t maxDepth) {
static const int MAX_DEPTH = 31;
static const int MAX_BACKTRACE_LINE_LENGTH = 800;
size_t i = 0;

if (maxDepth > MAX_DEPTH) {
maxDepth = MAX_DEPTH;
}
backtrace_frame_t mStack[MAX_DEPTH];
ssize_t count = unwind_backtrace(mStack, ignoreDepth + 1, maxDepth);
if (count <= 0) {
ALOGW("Can not get stack trace");
return;
}

backtrace_symbol_t symbols[count];

get_backtrace_symbols(mStack, count, symbols);
for (i = 0; i < count; i++) {
char line[MAX_BACKTRACE_LINE_LENGTH];
format_backtrace_line(i, &mStack[i], &symbols[i],
line, MAX_BACKTRACE_LINE_LENGTH);
ALOGD("AudioMachineDevice::AnalogOpen %s%s", "", line);
}
free_backtrace_symbols(symbols, count);
}
此方法===========新版本不能用, android KK版本能用。

2)方法二:
C++堆棧:【libutils.so】【backtrace】【c++】
include <utils/CallStack.h>

CallStack stack;
stack.update();
stack.dump();
此方法===========新版本不能用

3)方法三,參考debuggerd的方法。或者直接用debuggerd來打印棧。
參見代碼/system/core/debuggerd/
backtrace.cpp
debuggerd.cpp
tombstone.cpp

4)方法四,新版本android L,用
/system/core/libutils/CallStack.cpp 和頭文件 CallStack.h
進程號,可以用ProcessCallStack.cpp

使用的例子很簡單。例如
RefBase.cpp

直接調用
CallStack stack(“字符串”);
即可打印出棧。

#include <utils/CallStack.h> //include頭文件一定要放在.cpp頭部,不要放在namespace android { } 里面,否則報CallStack 未定義的錯誤。

鏈接庫 libutils 動態庫。

kernel和驅動打印調用棧的方法

調用函數dump_stack()即可打出內核棧。
但此刻的用戶棧不會打出來,如果需要此刻的用戶棧,只能觸發crash后,用crash工具和gdb工具來看進程的內核棧和用戶棧。

另外我的相關培訓視頻請看:
歡迎觀看我發布的各個課程: https://edu.51cto.com/lecturer/8896847.html

另外我的免費的linux各種驅動開發課程如下:
https://edu.51cto.com/course/17138.html

我的新的更多優惠的打包課程鏈接如下:
https://edu.51cto.com/sd/0a9d4

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平南县| 隆回县| 古交市| 临高县| 龙岩市| 始兴县| 湘潭县| 华蓥市| 洪江市| 鹤山市| 青神县| 焦作市| 哈尔滨市| 金山区| 河西区| 忻城县| 登封市| 澎湖县| 贞丰县| 万源市| 巴里| 天津市| 东阿县| 台安县| 泌阳县| 佛坪县| 景谷| 平山县| 岑溪市| 邢台市| 崇阳县| 玉林市| 钟山县| 商丘市| 华安县| 孝义市| 萨嘎县| 济宁市| 东辽县| 临夏市| 含山县|