一、背景
开发过程中,当程序发生错误或异常时,打印调用堆栈可以帮助开发者快速定位问题发生的代码位置。
调用堆栈显示了函数是如何被调用的,包括函数调用的顺序和参数值,这有助于理解程序的执行流程。
因此整理平时debug代码方法,相信会对大家有所帮助!内容如下:
二、Java 层查看堆栈打印
在你想查阅代码的地方加入下面两行代码即可。
for(StackTraceElement a:new Throwable().getStackTrace())
Log.d("haha","at "+a); //注意根据文件调整Log.d
三、C++ 层查看堆栈打印
步骤一:在Android.bp 或 Android.mk 中添加 libutilscallstack
//Android.bp
shared_libs: [
"libutilscallstack",
]
//Android.mk
LOCAL_SHARED_LIBRARIES:= libutilscallstack
//或
LOCAL_JNI_SHARED_LIBRARIES := libutilscallstack
步骤二:在你需要查看的cpp文件中添加下面代码
#include <utils/CallStack.h>
android::CallStack cs("cpp_log_tag");//在你想查阅代码的地方添加此语句
四、备注
printk 函数是内核态下的打印,
printf 函数是用户态下的打印。
printk 的输出级别是受控于内核的日志级别设置。
echo 7 > /proc/sys/kernel/printk //放开内核打印
echo 0 > /proc/sys/kernel/printk //关闭内核打印