tests工具学习文档(2)

1.3.1.2 debug
        该参数的帮助文档是:等待调试器的连接(wait for debugger to attach)。为了使用该参数必须实现android的调试器(Debugger),dalvik虚拟机支持许多开发环境下的源码级的调试,任何基于JDWP(Java Debug Wire Protocol)的远程调试工具都可以,包括JDB、Eclipse、JSwat等。
        首先,介绍该参数的实现原理。在本测试的脚本文件/android2.1/dalvik/tests/ect/push-and-run-test-jar(下文将解释为什么是这个)中可以看出,debug参数是通过以下命令才实现的:
代码位置:/android2.1/dalvik/tests/ect/push-and-run-test-jar
源代码:
调试参数设定:
if [ "$DEBUG" = "y" ]; then
    DEX_DEBUG="-agentlib:jdwp=transport=dt_android_adb,server=y,suspend=y"
fi
执行命令:
adb shell cd /data \; dalvikvm $DEX_VERIFY $DEX_OPTIMIZE $DEX_DEBUG \
$GC_OPTS -cp test.jar "-Xint:${INTERP}" -ea Main "$@"
参数解释如下:
transport: 所使用的传输机制,dalvik支持TCP/IP socket、通过adb(dt_android_adb)访
问USB的方式;
server:   决定虚拟机是作为服务器(server)还是客户端(client),作为服务器时,虚拟机等待调试器连接,反之,虚拟机主动试图连接调试器;
suspend: 如果是y,虚拟机在调试器连接之前不运行任何代码,连接时,它会告诉调试器它挂起了,直到有新的指令它才会运行。
    最终--debug的参数变为dalvikvm可执行文件的参���来执行。至于JDWP的工作原理,在此不展开讨论。
下面,介绍--debug参数的具体使用方法(以在Linux下运行android模拟器、执行本测试方法第17号源码为例进行介绍)。
1、在本地Linux环境启动android模拟器
cd /android2.1/out/host/linux-x86/bin (添加了环境变量后就可以在任意目录输入emulator)
emulator
2、运行本测试工具
cd /android2.1/dalvik/tests
./run-test --debug 017
此时在shell下将显示如下内容:
[seucr@android2 tests]$ ./run-test --debug 017-float/
/home/seucr/android2.1_r2/dalvik/tests/017-float: running...
(等待调试器连接)
3、运行DDMS
DDMS(Dalvik Debug Monitor Server)可以看做连接设备和JDWP调试器的桥梁,它显示设备当前的进程、方法等内容,允许向设备发送命令,调试器可以通过它看到设备底层的PID号、进程号等内容。
cd /android2.1/out/host/linux-x86/bin
ddms
此时在DDMS界面上可以看到当前模拟器的运行状态。由于此时已经在运行debug下的测试,因此在DDMS上可以看到一个进程名叫“?”,点击它。
4、运行JDB调试
jdb -attach localhost:8700
此时shell会显示如下内容:
[seucr@android2 bin]$ jdb -attach localhost:8700
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
>
VM Started: "thread=<3> main", dalvik.system.NativeStart.main(), line=-1 bci=-1
<3> main[1]
此时就已经进入了调试界面,通过help命令可以看到可执行的命令,包括run、step、stepi等很多。直接运行run可以跑完测试程序。
5、结果分析
最终的结果很有可能是测试FAILED(判断依据下文将详细叙述)。这是因为在执行build时前期会导致:
DDM dispatch reg wait timeout
Can't dispatch DDM chunk 52454151: no handler defined
错误,后来就可以正常运行,具体原因不详。但是对比expect.txt和output.txt,可以看出期望的结果已经运行出来了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwwjsz.html