Android培训
美国上市Android培训机构

400-111-8989

热门课程

Android应用开发怎么调试,Android开发调试手段

  • 时间:2017-04-25
  • 发布:Android培训
  • 来源:Android教程

1.JavaEclipse进行断点调试

如何调试Java程序?

大家最开始学习Java,都会觉得IDE调试好高端有木有,其实很简单了。

下文会尽量简单直观的教会你在Eclipse中调试,其他的IDE调试步骤也是类似的。

1.在你觉得有错的地方设置断点。

在代码行数前,点击右键,注意是右键,然后选择ToggleBreakpoint。

你可能会问,我如何知道在哪儿放置断点?

如果对这个问题完全没有感觉,你完全可以多打几个断点,单步调试直到找到异常,只是多花一点时间而已,而且这样可以更深入了解程序的执行过程!
当然,如果你大致可以直到哪里可能会出问题,或者异常信息报告类位置,那么就可以在这里设置断点。
2.点击Debug,如果是web程序,需要你将Tomcat或者Apache服务器以Debug模式启动。

这很重要,标准的Start模式,不能进入预先设置的断点,也就不能达到调试的目的。

3.运行程序,当程序运行到刚才设置断点的位置就会停下来,并且那行代码底色会高亮显示。

这时候,你可以通过屏幕按钮或者键盘控制程序的进行。

下面是键盘对应调试的快捷键,如果不起作用,你可以检查一下是不是键盘冲突。

比如有道词典的快捷键,经常会和Debud模式下的Resume冲突。

作用域功能快捷键

全局单步返回F7
全局单步跳过F6
全局单步跳入F5
全局单步跳入选择Ctrl+F5
全局调试上次启动F11
全局继续F8
全局使用过滤器单步执行Shift+F5
全局添加/去除断点Ctrl+Shift+B
全局显示Ctrl+D
全局运行上次启动Ctrl+F11
全局运行至行Ctrl+R
全局执行Ctrl+U

4.进入调试界面可以看到你想要的信息。

5.在Variables里面可以查看所有变量的值,比如刚才设置的断点里面的值,右键ChangeValue可以更改,部分IDE支持在窗口中热更改并执行代码。

6.下面按钮第一个是进入方法执行,比如你调用了其他方法,可以进入方法一步一步执行,如果点击第二个按钮,只会在本方法内一步一步执行,第三个按钮时你跳出此方法,继续执行调用这个方法的原方法,说明如下。

7.执行完程序。

8.为Eclipse添加反编译插件,更好的调试
一般来说,我们的项目或多或少的都会引用一些外部jar包,如果可以查看jar包的源代码,对于我们的调试可以说是事半功倍。

1、下载并安装jad.exe。将jad.exe解压到程序目录(可以放置任意目录),例如:C:\ProgramFiles\Jad\jad.exe。

2、安装jadclipse插件。下载并解压net.sf.jadclipse_3.3.0.jar,将其拷贝到eclipse\plugins目录下,重新启动eclipse。

3、配置jadclipse。在eclipse窗口下,点击Window>Preferences>Java>JadClipse>PathtoDecompiler。
(设置jad的绝对路径,例如C:\ProgramFiles\Jad\jad.exe)
可将UseEclipsecodeformatter(overridesJadformattinginstructions)选项打勾,这样可以与Ctrl+Shif+F格式化出来的代码样式一致。

执行完这几个步骤,再在导入自Jar包的类或者方法上点击查看,就可以查看源代码了,如果不能,参考下面的解决办法:

多数情况下,是eclipse未能自动将JadClipseClassFileViewer设置成class文件的缺省打开方式。
在Eclipse的Windows——>Perference——>General->Editors->FileAssociations中修改“.class”和“.classwithoutsource”默认关联的编辑器为“JadClipseClassFileViewer”。
曾经配置过几次jad插件,如果不能反编译,如此设置后,屡试不爽。

原文:http://www.cnblogs.com/binyue/p/3324524.html

2.AndroidDDMS查看Threads情况

有时候程序运行出现死锁或者信号量卡死是很纠结的问题,单看代码很难分析定位问题,这时候可以借助DDMS来查看threads的运行情况,一目了然。
手机连接上USB,确保adb连通,然后启动Eclipse里的DDMS,这时候应该手机就正常连接上了

就如上图中显示的,只要连接上了就可以查看某个进程里的所有线程的活动了;下面具体解释下Threads标签页里给出的每个字段的意思:
ID:虚拟机分配的唯一的线程ID,在Dalvik里,它们是从3开始的奇数。
Tid:Linux的线程ID号
Stauts:线程状态,比较多,有下面的一些
running:正在执行程序代码
sleeping:执行了Thread.sleep()
monitor:等待接受一个监听锁。
wait::Object.wait(),等待被其他线程唤醒
ative:正在执行native代码,
vmwait:等待虚拟机,(这个不是很懂,高手指教,这个状态在什么情况下发生)
zombie:线程在垂死的进程
init:线程在初始化(我们不可能看到)
starting:线程正在启动(我们不可能看到)
utime:执行用户代码的累计时间
stime:执行系统代码的累计时间
ame:线程的名字

另外,右侧每个Thread选中之后可以在下面看到Refresh按钮,这个点了之后,可以看到线程的函数执行,结合Status可以知道目前情况;而出现问题时某个线程一般会变为monitor状态,这时候就要特别留意他,并refresh下,检查他的执行情况,再回头结合代码,一般都能找到问题出在什么地方;

大家可以看到一般一个虚拟机实例进程都包含有如下7个通用的线程,下面大致讲一下这些线程的作用和创建流程。
1.main
这个就是主线程了。具体流程待细述。
2.HeapWorker
一个异步的工作线程,处理那些需要在单独线程里面做的避免同步问题的堆操作。其源代码在dalvik/vm/alloc/HeapWorker.*部分。
3.SignalCatcher
这个线程是用来捕获linux信号和做一些后续处理的。比如说,当一个SIGQUIT(Ctrl-)信号到达后,这个线程就会挂起虚拟机,并且将所有线程的状态信息输出到log。其源代码在dalvik/vm/SignalCatcher.*部分。
4.JDWP
这个线程是用来实现JavaDebugWireProtocol的。如果命令行调试器的参数为”suspend=y”,这样会暂停虚拟机。这个估计和eclipse的调试和ddms等调试工具相关。其源代码在dalvik/vm/jdwp/*部分。
5.StdioConverter
这个线程从标准输出和标准错误输出读取信息并将它们转换为log信息。其源代码在dalvik/vm/StdioConverter.*部分。
6.Compiler
Android’sJit独立于目标平台的部分。其源代码在dalvik/vm/compiler/Compiler.和dalvik/vm/interp/Jit.等部分。
7.BinderThread#%d
使用binder进行通讯时用到的线程。其源代码在frameworks/base/libs/binder/*等部分。
以下的线程属于system_server和应用程序专有线程,视具体应用的需求而定。
8.system_server专有
android.server.ServerThread
ActivityManager
ProcessStats
PackageManager
FileObserver
AccountManagerService
SyncHandlerThread
UEventObserver
PowerManagerService
AlarmManager
WindowManager
InputDeviceReader
WindowManagerPolicy
InputDispatcher
ConnectivityThread
WifiService
WifiWatchdogThread
LocationManagerService
AudioService
GpsEventThread
GpsNetworkThread
android.hardware.SensorManager$SensorThread
watchdog
Wallpaper
com.android.server.MountListener
9.misc
其他部分线程由java层的api提供,Thread等。
上一篇:怎么更新Android UI,Android UI更新的4个方法
下一篇:Android开发实用代码大全

Android eclipse开发环境配置,Windows 32位/64位系统 Android eclipse环境搭建教程

Android APP开发学习线路图,Android APP 开发要掌握这些技能

Android应用开发实战教程,开始你Android应用开发的第一步

如何为安卓开发搭建一个持续集成(CI)服务器

选择城市和中心
贵州省

广西省

海南省

台湾