Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否可以查看在Logcat中调用了哪些函数?_Android_Adb_Logcat - Fatal编程技术网

Android 是否可以查看在Logcat中调用了哪些函数?

Android 是否可以查看在Logcat中调用了哪些函数?,android,adb,logcat,Android,Adb,Logcat,我知道,有一种方法可以查看在log cat中调用了哪些函数,就是在每个函数的顶部写一条日志消息 @Override protected void onDestroy() { super.onDestroy(); Log.d("myTag","onDestroy function is called!"); // some logic } 但当你有更多的功能时,它会变得令人恼火 因此,我想知道是否有一种方法可以在不为每个函数编写日志消息的情况下查看在adb logcat中

我知道,有一种方法可以查看在log cat中调用了哪些函数,就是在每个函数的顶部写一条日志消息

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.d("myTag","onDestroy function is called!");
    // some logic
}
但当你有更多的功能时,它会变得令人恼火

因此,我想知道是否有一种方法可以在不为每个函数编写日志消息的情况下查看在adb logcat中调用了哪些函数


我希望可以从堆栈中的某个位置获取它们,但我找不到它。

您可以使用其中一个

String name = new Object(){}.getClass().getEnclosingMethod().getName();

以更精确的方式使用这个

StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace();
StackTraceElement e = stacktrace[1]; //coz 0th will be getStackTrace so 1st
String methodName = e.getMethodName();
System.out.println(methodName);

资料来源:谷歌;)

而不是在每个函数中打印日志。我(或大多数人)会建议你把调试

要使用调试,请首先在要检查的每个函数内创建断点。要应用断点,只需在代码左侧的区域中单击鼠标左键(请参阅图片,粉红色圆圈表示断点)

然后要使用Debug,您必须在成功运行应用程序后按下此按钮

一旦调用第一个方法,您的应用程序将在断点处暂停,然后您可以使用F8(或F6,如果您使用eclipse设置)移动到下一行,要移动到下一个断点,您可以按F9(或F8,如果您使用eclipse设置)。这种方法可以检查所有被调用的函数

如果您只想确保调用某个特定函数,那么这个断点方法非常有用

除此之外,如果您仍然坚持要知道可以存储stacktrace的所有函数的详细信息

  final StackTraceElement[] trace = new Throwable().getStackTrace())
  StackTraceElement   STrace      = trace[1];
  String  className = STrace.getMethodName();
你可以试试。在这种情况下,只能使用
@DebugLog
对方法进行注释。然后Hugo将为您生成日志(并打印参数和返回值!)。GitHub的示例:

@DebugLog
public String getName(String first, String last) {
  SystemClock.sleep(15); // Don't ever really do this!
  return first + " " + last;
}
和日志输出:

V/Example: ⇢ getName(first="Jake", last="Wharton")
V/Example: ⇠ getName [16ms] = "Jake Wharton"

尝试使用断点而不是logcatHave查看以下内容:
V/Example: ⇢ getName(first="Jake", last="Wharton")
V/Example: ⇠ getName [16ms] = "Jake Wharton"