最近在调试bug时候,由于做的是sdk,并不能确定外部是如何调用sdk的函数,所以需要知道调用堆栈。打log肯定是可行的。
在阅读Log.java后发现可以在函数中放入Throwable
作为参数,这样日志就会输出调用栈。
具体如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Exception e = new Exception();
Log.w("naruto", "naruto", e);
findViewById(R.id.text).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Naruto", Toast.LENGTH_SHORT).show();
}
});
}
日志提供了这种方式,非常简单的就打出了调用栈。只是之前一直不知道。
Log.java
public static int d(String tag, String msg)
public static int d(String tag, String msg, Throwable tr)
public static int e(String tag, String msg)
public static int e(String tag, String msg, Throwable tr)
public static int i(String tag, String msg)
public static int i(String tag, String msg, Throwable tr)
public static int v(String tag, String msg)
public static int v(String tag, String msg, Throwable tr)
public static int w(String tag, String msg)
public static int w(String tag, String msg, Throwable tr)
public static int w(String tag, Throwable tr)
以上这些函数中除了可以打普通的log,还可以打印调用栈。推荐使用w的最后一个,简单。
后面发现直接在debug里控制更简单,只要在断点里加上日志输入,就可以在断点里直接输出了,无需修改代码
Log.getStackTraceString(new Throwable())
推荐使用这种方式,更简单,更快捷