灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2055回复:0

Android中调试手段

楼主#
更多 发布于:2012-09-06 14:01

下面来简单介绍下 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();
    }
}
有兴趣的朋友可以尝试一下。


喜欢0 评分0
游客

返回顶部