日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中添加CallStack

發布時間:2024/8/1 Android 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中添加CallStack 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(1)Java中添加

Java中添加callstack常見以下幾種方式。

import android.util.Log;//(1) Exception e = new Exception("this is a log"); e.printStackTrace();//(2) Thread.currentThread().getStackTrace();//(3) Log.e("dump_test" , Log.getStackTraceString(new Throwable()));

(2)C++中添加

(A)Mtk Camera Hal中有自定義的stack

//vendor/mediatek/proprietary/hardware/mtkcam/include/mtkcam/utils/std //Misc.hnamespace NSCam {namespace Utils {void dumpCallStack(char const* prefix = 0);bool saveBufToFile(char const*const fname, unsigned char*const buf, unsigned int const size);unsigned int loadFileToBuf(char const*const fname, unsigned char*const buf, unsigned int const capacity);} }//vendor/mediatek/proprietary/hardware/mtkcam/utils/std //Misc.cpp//可使用如下方式進行使用 NSCam::Utils::dumpCallStack(__FUNCTION__);NSCam::Utils::saveBufToFile(filename,(unsigned char*)jpg.mOutputJpegBuffer->getBufVA(0),jpg.mOutputJpegBuffer->getBufSizeInBytes(0));//使用示例 #include <mtkcam/utils/std/Misc.h> using namespace NSCam; using namespace android; using namespace std;NSCam::Utils::dumpCallStack(__FUNCTION__);

打印示例

11-15 15:37:23.082 748 6053 I MtkCam/Utils/encodeMainJpeg: pid(748) tid(6053) Cam@Jpeg 11-15 15:37:23.082 748 6053 I MtkCam/Utils/encodeMainJpeg: #00 pc 0000000000003040 /vendor/lib64/libladder.so (UnwindCurThreadBT+120) 11-15 15:37:23.082 748 6053 I MtkCam/Utils/encodeMainJpeg: #01 pc 000000000000e4c4 /vendor/lib64/libmtkcam_stdutils.so (NSCam::Utils::dumpCallStack(char const*)+52) 11-15 15:37:23.082 748 6053 I MtkCam/Utils/encodeMainJpeg: #02 pc 00000000001702ec /vendor/lib64/libmtkcam_hwnode.so (JpegNodeImp::encodeMainJpeg(android::sp<encode_frame>&)+44) 11-15 15:37:23.082 748 6053 I MtkCam/Utils/encodeMainJpeg: #03 pc 000000000016ceb4 /vendor/lib64/libmtkcam_hwnode.so (onProcessRequest(JpegNodeImp&, Request&)+788) 11-15 15:37:23.082 748 6053 I MtkCam/Utils/encodeMainJpeg: #04 pc 000000000017f064 /vendor/lib64/libmtkcam_hwnode.so (void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(JpegNodeImp&, Request&), std::__1::reference_wrapper<JpegNodeImp>, std::__1::reference_wrapper<Request> > >(void*)+44) 11-15 15:37:23.082 748 6053 I MtkCam/Utils/encodeMainJpeg: #05 pc 00000000000b0bd8 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+64) 11-15 15:37:23.082 748 6053 I MtkCam/Utils/encodeMainJpeg: #06 pc 00000000000505d0 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)

(B)C++中通用添加

(a)在Android.bp / Android.mk 中添加 libutilscallstack

//Android.bp shared_libs: ["libutilscallstack",]//Android.mk LOCAL_SHARED_LIBRARIES:= libutilscallstack //或 LOCAL_JNI_SHARED_LIBRARIES := libutilscallstack

(b)在C++源碼文件預編譯 include 中添加

#include <utils/CallStack.h>

(c)添加代碼實現

#include <utils/CallStack.h> using android::CallStack;CallStack stack; stack.update(); stack.log(__FUNCTION__);

(d)系統庫的源碼位置

//system/core/libutils/include/utils/CallStack.hclass CallStack { public:CallStack();~CallStack();void clear() { mFrameLines.clear(); }void update(int32_t ignoreDepth = 1, pid_t tid = BACKTRACE_CURRENT_THREAD);void log(const char* logtag,android_LogPriority priority = ANDROID_LOG_DEBUG,const char* prefix = nullptr) const;void dump(int fd, int indent = 0, const char* prefix = nullptr) const;String8 toString(const char* prefix = nullptr) const;void print(Printer& printer) const;}//system/core/libutils/CallStack.cpp

(e)打印示例

11-15 15:37:23.394 748 6053 D encodeMainJpeg: #00 pc 00000000001703d4 /vendor/lib64/libmtkcam_hwnode.so (JpegNodeImp::encodeMainJpeg(android::sp<encode_frame>&)+276) 11-15 15:37:23.394 748 6053 D encodeMainJpeg: #01 pc 000000000016ceb4 /vendor/lib64/libmtkcam_hwnode.so (onProcessRequest(JpegNodeImp&, Request&)+788) 11-15 15:37:23.394 748 6053 D encodeMainJpeg: #02 pc 000000000017f064 /vendor/lib64/libmtkcam_hwnode.so (void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(JpegNodeImp&, Request&), std::__1::reference_wrapper<JpegNodeImp>, std::__1::reference_wrapper<Request> > >(void*)+44) 11-15 15:37:23.394 748 6053 D encodeMainJpeg: #03 pc 00000000000b0bd8 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+64) 11-15 15:37:23.394 748 6053 D encodeMainJpeg: #04 pc 00000000000505d0 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)

(3)Kernel中添加

Kernel中較簡單,直接有現成的函數可以使用

dump_stack() //這個函數打出當前堆棧和函數調用backtrace后接著運行WARN_ON(x) //這個函數跟dump_stack很像,如果條件滿足了就把stack打出來 //WARN_ON(1);

總結

以上是生活随笔為你收集整理的Android中添加CallStack的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。