zoukankan      html  css  js  c++  java
  • dalvik直接跑hello world并用jdb调试

    像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)

  • 相关阅读:
    努力学习吧!
    C# 捕捉键盘事件
    oracle 11g 及 plsqldeveloper 相关操作
    Oracle 建表空间
    窗体程序 防止重复打开子窗体
    asp 下 ewebeditor 上传图片功能,在IE7,IE8 及更高版本上失效解决方法
    StringBuilder 在后台动态输出 html 代码
    起动停止 Oracle11g 三个服务的批处理写法
    MySQL 常用命令语句
    虚拟机—pychrm
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3003924.html
Copyright © 2011-2022 走看看