我在物理设备上运行应用程序,它成功创建了跟踪文件。后来我在它们上运行 dmtracedump 以生成调用堆栈图,但它不包含我的任何应用程序方法调用。
为了测试这一点,我创建了一个简单的 Android 应用程序,将 debuggable 添加到清单中:
<application
...
android:debuggable="true">
创建了两个测试类A和B。A类有两个方法b()和c():
public class A {
private int _i;
public A(){_i=0;}
public void b(){c();}
public void c(){for(int k=0;k<20;k++)_i++;}}
B 类有一个方法 c():
public class B {
public void c(){
(new A()).b();
A d = new A();
d.c();
}}
最后,在 onCreate 和 onDestroy 方法的主要活动中,我开始了跟踪:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Debug.startMethodTracing("debugtest");
A a;
for (int i = 0; i < 20; i++) {
a = new A();
a.b();
a.c();
}
(new B()).c();
}
@Override
public void onDestroy() {
super.onDestroy();
Debug.stopMethodTracing();
}
我希望在调用堆栈图中至少获得 Ab() 和 Ac() 方法调用,但在运行之后:
adb pull sdcard/debugtest.trace . ; dmtracedump debugtest.trace -g tree.png
生成的调用图如下:
这是它应该如何工作,即只显示android调用而不是应用程序方法调用,还是我错过了什么?
请注意,我最感兴趣的是检索方法执行的独占和包含时间。