Android中调试手段
2483 点击·0 回帖
![]() | ![]() | |
![]() | 下面来简单介绍下 Android 中的一种调试方法。 在 Android 的 app 开发与调试中,经常需要用到打 Log 的方式来查看函数调用点。 这里介绍一种方法来打印当前栈中的函数调用关系 [html] StackTraceElement[] ste = new Throwable().getStackTrace(); if(ste.length >=1) { for(int i = 1; i < ste.length; i++) { Log.d("TAG", "File:" + ste.getFileName() + " Line: " + ste.getLineNumber() + " MethodName:" + ste.getMethodName()); } } StackTraceElement[] ste = new Throwable().getStackTrace(); if(ste.length >=1) { for(int i = 1; i < ste.length; i++) { Log.d("TAG", "File:" + ste.getFileName() + " Line: " + ste.getLineNumber() + " MethodName:" + ste.getMethodName()); } } 这里我将上述代码块放在 LabelDisplayItem 类的 updateContent 函数中,打印出来的 Log 如下所示 D/AlbumSetDir( 1554): File:AlbumSetSlidingWindow.java Line: 550 MethodName:render D/AlbumSetDir( 1554): File:SlotView.java Line: 375 MethodName:renderItem D/AlbumSetDir( 1554): File:SlotView.java Line: 304 MethodName:render D/AlbumSetDir( 1554): File:AlbumSetView.java Line: 203 MethodName:render D/AlbumSetDir( 1554): File:GLView.java Line: 244 MethodName:renderChild D/AlbumSetDir( 1554): File:GLView.java Line: 218 MethodName:render D/AlbumSetDir( 1554): File:AlbumSetPage.java Line: 175 MethodName:render D/AlbumSetDir( 1554): File:GLRootView.java Line: 305 MethodName:onDrawFrameLocked D/AlbumSetDir( 1554): File:GLRootView.java Line: 266 MethodName:onDrawFrame D/AlbumSetDir( 1554): File:GLSurfaceView.java Line: 1468 MethodName:guardedRun D/AlbumSetDir( 1554): File:GLSurfaceView.java Line: 1222 MethodName:run 注意,这是栈,调用关系是从下往上看的 如果只是想在文件中添加一些输出,譬如想输出当前哪一行,在哪个文件中,用下面的测试代码就可以了 [java] public class Test { public static void main(String args[]) { System.out.println("This is " + getLineInfo()); } public static String getLineInfo() { StackTraceElement ste = new Throwable().getStackTrace()[1]; return ste.getFileName() + ": Line " + ste.getLineNumber(); } } public class Test { public static void main(String args[]) { System.out.println("This is " + getLineInfo()); } public static String getLineInfo() { StackTraceElement ste = new Throwable().getStackTrace()[1]; return ste.getFileName() + ": Line " + ste.getLineNumber(); } } 有兴趣的朋友可以尝试一下。 | |
![]() | ![]() |