Android中添加CallStack
生活随笔
收集整理的這篇文章主要介紹了
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue日历插件vue-calendar
- 下一篇: android sina oauth2.