Android中調試手段

下面來簡單介紹下 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[i].getFileName() + "   Line: " + ste[i].getLineNumber() + "    MethodName:" + ste[i].getMethodName()); 
    } 

StackTraceElement[] ste = new Throwable().getStackTrace(); 
if(ste.length >=1)
{
 for(int i = 1; i < ste.length; i++)
 {
  Log.d("TAG", "File:" + ste[i].getFileName() + "   Line: " + ste[i].getLineNumber() + "   MethodName:" + ste[i].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(); 
    } 

有興趣的朋友可以嘗試一下。

 

摘自 fulinwsuafcie的專欄

發佈留言