dumpJava和C++函数调用栈HelloWorld3

(1)通常的方法是使用exception的printStackTrace()方法:

try{...}catch(RemoteExceptione){e.printStackTrace();...}(2)测试Demo

classPerson{publicvoidperson_dump_stack(){try{thrownewException("my_dump");}catch(Exceptione){e.printStackTrace();}}}publicclassTest{publicstaticvoidmain(String[]args){Personp=newPerson();p.person_dump_stack();}}ViewCode执行结果:

#javaTestjava.lang.Exception:my_dumpatPerson.person_dump_stack(Test.java:5)atTest.main(Test.java:15)ViewCode

(3)当然也可以只打印堆栈不退出,Java代码中插入堆栈打印的方法如下:

Log.d(TAG,Log.getStackTraceString(newThrowable()));(4)测试Demo

Android.mk:LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_SRC_FILES:=JavaDump.javaLOCAL_MODULE:=java_dumpinclude$(BUILD_JAVA_LIBRARY)JavaDump.java:importandroid.util.Log;classAnimal{publicvoidanimal_dump_java_stack(){StringTAG="java_dump:";Log.d(TAG,Log.getStackTraceString(newThrowable()));}}classPersonextendsAnimal{publicvoidperson_dump_java_stack(){animal_dump_java_stack();}}publicclassJavaDump{publicstaticvoidmain(Stringargs[]){Personperson=newPerson();person.person_dump_java_stack();}}ViewCode执行结果:

1|shell@tiny4412:/system/mytest#dalvikvm-cp./java_dump.jarJavaDumpjava.lang.UnsatisfiedLinkError:Noimplementationfoundforintandroid.util.Log.println_native(int,int,java.lang.String,java.lang.String)(triedJava_android_util_Log_println_1nativeandJava_android_util_Log_println_1native__IILjava_lang_String_2Ljava_lang_String_2)atandroid.util.Log.println_native(NativeMethod)atandroid.util.Log.d(Log.java:139)atAnimal.animal_dump_java_stack(JavaDump.java:7)atPerson.person_dump_java_stack(JavaDump.java:13)atJavaDump.main(JavaDump.java:22)ViewCode这个效果是最好的,注意打印出来的还有类名和行号,可以避免类的继承关系带来的混淆。

补充:感觉下面这个好用一些

newRuntimeException("stack_dump").printStackTrace();//打印栈回溯

2.C++代码中打印堆栈

(1)C++也是支持异常处理的,异常处理库中,已经包含了获取backtrace的接口,Android也是利用这个接口来打印堆栈信息的。在Android的C++中,已经集成了一个工具类CallStack,在libutils.so中。使用方法:

#include...CallStackstack;/*voidupdate(int32_tignoreDepth=1,pid_ttid=BACKTRACE_CURRENT_THREAD);*/stack.update();/*voiddump(intfd,intindent=0,constchar*prefix=0)const;*/stack.dump();(2)测试Demo

Android.mk:LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_SRC_FILES:=CppDump.cppLOCAL_SHARED_LIBRARIES:=\libcutils\libutils\liblogLOCAL_MODULE:=cpp_dumpinclude$(BUILD_EXECUTABLE)CppDump.cpp:#defineLOG_TAG"dump_cpp:"#defineSTDOUT1#includeusingnamespaceandroid;classPerson{public:voidperson_dump_cpp(){CallStackstack;stack.update();stack.dump(STDOUT,0,LOG_TAG);}};intmain(){Personp1;p1.person_dump_cpp();return0;}ViewCode执行结果:

shell@tiny4412:/system/mytest#./cpp_dumpdump_cpp:#00pc00003035/system/lib/libbacktrace.so(Backtrace::Unwind(unsignedint,ucontext*)+8)dump_cpp:#01pc0000d061/system/lib/libutils.so(android::CallStack::update(int,int)+52)dump_cpp:#02pc000003f9/system/mytest/cpp_dumpdump_cpp:#03pc000128f1/system/lib/libc.so(__libc_init+44)dump_cpp:#04pc0000047c/system/mytest/cpp_dumpViewCode可以看出效果并不怎么好。

补充:可以参考下面

//frameworks/native/libs/binder/IPCThreadState.cppCallStack::logStack("onewayspamming",CallStack::getCurrent().get(),ANDROID_LOG_ERROR);

THE END
1.C++?C++ ? C++ ? ? Allocators C++ iostream ? ?(C++) ? PDF Learnhttps://learn.microsoft.com/ko-kr/cpp/standard-library/cpp-standard-library-header-files
2.桌面快捷方式与邮件发送功能实现HelloKitty 代码Python 一名全栈小白的博客 5562 【代码】HelloKitty 代码Python。话不多说直接上代码,绘制速度慢,录屏之后调倍速 Python凯蒂猫(完整代码) 兔子王 2万+ 用python画HelloKitty的完整代码。c# - 期末大作业:俄罗斯方块 陈杉菜 2130 c# - 期末大作业:俄罗斯方块总体视图 & 废话集结区代码(全)Formhttps://blog.csdn.net/TuT12323/article/details/128130897
3.hellokittyPythonhellokittyPython代码hello kittyPython hello kittyPython代码,文章目录1、大写首字母2、逗号连接3、分块4、合并两个字典5、回文序列6、检查重复项7、解包8、链式对比9、链式函数调用10、列表的差11、内存占用12、使用枚举13、首字母小写14、通过函数取差15、不使用if-else的计算子16、压缩17https://blog.51cto.com/u_16099299/8579827
4.Hellokitty在线代码实例App下载 扫码下载编程狮APP 注册|登录 实例代码( Tip: 登录后体验更佳 ) 运行代码 1 print("World!") XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXhttps://www.w3cschool.cn/tryrun/showphp/Hellokitty
5.分享哈喽kt猫代码import math import turtle as t # 计算长度、角度 t1:画笔对象 r:半径 angle:扇形(圆形)的角度 def myarc(t1, r, angle): arc_length = 2 * math.pi * r * angle / 360 # angle角度的扇形的弧长 n = int(arc_length / 3) + 1 # 线段条数 https://leetcode.cn/circle/discuss/hoEKOr/
6.现代C++白皮书(中文版)下载中心专版电子工程世界现代C++白皮书(中文版)[复制链接]本书来自于 C++ 之父 Bjarne Stroustrup 为 ACM 国际计算机协会的https://bbs.eeworld.com.cn/thread-1275345-1-1.html
7.「Grab招聘」Grab怎么样?统一社会信用代码:91110108MA0097XC3W 职位 地图工程师20k-50k 北京本科及以上3-5年后端开发、深度学习、数据挖掘、互联网出行、IT研发、后端开发、C/C++、Python、Go、机器学习、深度学习、数据挖掘、搜索算法/推荐算法、人机交互、大数据 Mac办公,入职奖金,年底双薪,绩效奖金,带薪年假,弹性福利 https://maimai.cn/brand/home/18fhXOwGB
8.gutentags:gutentags:gtagsDescribe the bug I got error message like tittle. And I put "let g:gutentags_trace = 1" in .vimrc then I saw a message: gutentags: Running: ['gtags', '--incremental', '/home/hellokitty/.cache/.tags/project-hellokitty-proj1-'] gutentags: https://github.com/ludovicchabant/vim-gutentags/issues/225
9.hacknet怎么改界面皮肤#vscode 超详细保姆级教程讲解vscode配置c语言C++开发环境,VSCODE配置C++环境,VSCODE新手入门教程,VSCODE配置C语言环境,VSCODE改中文,VSCODE的C++插件,VSCODE修改界面语言,vscode配置c++的debug和release版本输出,mingw安装教程。 #c语言 #vscode配置 #vscode安装 #vscode插件 00:00 / 08:08 连播 清屏 智能 倍速 点赞https://www.douyin.com/topic/7447282382215972914