dalvik直接跑hello world并用jdb调试

本文介绍了如何在没有adb和ddms的情况下,通过jdb远程调试Dalvik虚拟机上运行的Java程序。首先在Eclipse中创建Hello World程序,将其转换为dex格式,然后设置环境变量并启动dalvikvm。接着通过添加-agentlib参数启用jdwp,使用jdb连接到指定端口进行调试,并展示了一些基本的调试命令。同时,还探讨了查看源代码和使用jmap的可能性。
摘要由CSDN通过智能技术生成
像Android 这样的 Java,  C/C++ 混合的应用,如何进行调试
Native (C/C++) 调试比较简单,启动程序(source 加入 sleep ) , 再启动 gdb 而后把 attach pid 就可以了

Java是否更简单,Eclipse  本来就通过 ddms 提供此功能
但是如果
没有adb, 没有ddms能否做调试


现在我想对 dalvikvm 上运行的代码进行调试
1) 首先在在 eclipse 中建一个 helloworld 程序
而后到 bin 找到生成的程序,直接用 7z 打包 hello.zip (从根路径打包, 子路径和文件是:com\pnp\hello\Main.class)

2) sun java 的 bytecode 是不能被 dalvikvm 解释执行的,转化
D:\>dx --dex --output=c:\hello.dex C:\e\workspace_android\hello\bin\hello.zip

3) 准备启动 dalvik
a) dalvik 是需要load java 基本类的
设置环境变量,告诉 daolvik 包的位置
export ANDROID_ROOT=/home/user/jb/system
export FRAMEWORK=$ANDROID_ROOT/framework
export BOOTCLASSPATH=$FRAMEWORK/core.jar:$FRAMEWORK/core-junit.jar:$FRAMEWORK/bouncycastle.jar:$FRAMEWORK/ext.jar:$FRAMEWORK/framework.jar:$FRAMEWORK/android.policy.jar:$FRAMEWORK/services.jar:$FRAMEWORK/apache-xml.jar
(上面的 jar 有些可能是不需要的)

b) 用下面的命令就可以运行程序了
./dalvikvm  -cp hello.dex com.pnp.hello.Main 


4)用jdb调试程序dalvik上跑的java程序
我现在没有ddms,  只有jdb.
jdb是 sun 提供的工具,能否调试 dalvikvm 上的程序。我想是可以因为他们都遵循 jdwp 这个规范

a)启动应用程序
./dalvikvm  -agentlib:jdwp=transport=dt_socket,address=8011,server=y,suspend=y -cp hello.dex com.pnp.hello.Main 
b) 用 jdb 连接端口成功了
jdb -attach localhost:8011
c) 使用调试命令
stop at com.pnp.hello.Main:7
stop in com.pnp.hello.Main.main
命令比较
    gdb              jdb
    bt             where
    del           clear
    stop         break
    finish      step up
更多
http://www.fas.harvard.edu/~cscie119/resources/jdb_reference.pdf

5)如果想看但 source code
用命令

jdb -classpath robocode/libs/robocode.jar:bin -sourcepath src
内部设置 sourcepath 用 "use"

6)想看看jmap 是否也work
jmap -heap 29959
报告下面错误,看来只有 jdb 能混用
sun.jvm.hotspot.debugger.NoSuchSymbolException: Could not find symbol "gHotSpotVMTypes" in any of the known library names (libjvm.so, libjvm_g.so, gamma_g)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值