12月 062019
 

本来一直是在源码中加Log的方法进行调试

但是有些函数很长,if分支也很多,而且还有一些是通过线程或者binder、sendMessage等异步的方式调用的,加上系统编译又很慢,调试起来真是费劲

后来想到程序报错时会输出java的函数栈,我们能不能利用这个呢?可以一直追踪到函数的前几个调用函数。

答案是可以的,我们可以在代码中加入下面的代码,让程序打印调用栈

new Exception().printStackTrace()

加上这个以后,会打印堆栈,但不是抛出异常,这样就很方便的知道函数的调用栈列表了

对于调用Aidl时客户端的堆栈跟踪

假如我们跟踪某段代码后,发现这段代码是通过aidl被调用的,那我们就跟踪不到调用端的代码了,那么我们可以通过throw一个Exception的方式还跟踪。调用端会触发RemoteException而打印出堆栈。

当然,如果客户端try catch了RemoteException这个方式可能就不起作用了

throw new IllegalStateException(“Throw an aidl remote exception.” );

客户端会报如下样式的错误:

 

打赏
 Posted by on 2019-12-06

Sorry, the comment form is closed at this time.