单步调试android_android 单步调试 - CSDN
  • 在上一遍文章《使用Android Studio导入Android系统源码》中,我们已经介绍了如何将Android源代码导入Android Studio进行阅读,这篇文章我们开始介绍,如何使用Android Studio对系统源代码打断点并进...

    转载请注明出处:https://blog.csdn.net/turtlejj/article/details/83860708,谢谢~

     

            在上一遍文章《使用Android Studio导入Android系统源码》中,我们已经介绍了如何将Android源代码导入Android Studio进行阅读,这篇文章我们开始介绍,如何使用Android Studio对系统源代码打断点并进行单步调试。

            想要对手机系统进行单步调试,需要具备以下几个条件:

            1. 手机的软件版本必须是userdebug或者eng,user版本的手机由于各种权限限制,是没办法进行单步调试的

            2. 在"开发者选项"中打开"USB调试",否则Android Studio无法连接我们的手机 (如何调出"开发者选项"请自行百度)

            3. 手机中的版本最好是当前代码编译出来的,如果版本与代码不一致,可能导致在断点断住代码时发生错行的问题

     

            如果上述的条件都满足,那么我们就可以继续了。

     

            举例来说,我们想要学习一下不同类型(无条件、遇忙、不可及、无应答)的呼叫转移传递给Modem的参数有哪些不同。这个时候,我们可以在RIL.java文件的setCallForward()方法中打上断点(虽然这里没什么必要,因为会打印log,不过我们只是拿这个地方来学习一下如何打断点^_^)

            在代码窗口点击最左边,点击一下,会在该行代码前面出现一个红色的小圆点,表明代码在运行到这里之后,会被断住,不再往下执行。

            打好断点之后,我们还需要选择要当前代码运行的进程,首先将手机与电脑连接,打开上面提到过的"USB调试"功能,点击下图中的按钮,或点击"Run -> Attach debugger to Android process"

           

            点击后,会弹出一个名叫"Choose Process"的窗口,勾选"Show all processes","Debugger"选择Auto,如果顺利的话,下面会列出当前手机中正在运行的所有进程(如果没有列出来进程,请查看文章最后列出的一些有可能出问题的点,帮你提供一些思路),如下图所示

            由于RIL.java文件是跑在com.android.phone进程中的,所以这里我们选中phone进程,并点击OK。点击后,Android Studio的最下方会弹出一个窗口,如下图所示:

            并且,如果选中的进程没错的话,刚刚打断点的那个红色小圆点中会被打上一个对勾,反之则没有(即,如果我们刚才选择的是一个其他的进程,如com.android.bluetooth,则小圆点不会被打钩,因为RIL.java不是跑在该进程中的)。

            好,准备工作都已经结束了,接下来在手机上设置呼叫转移,当点击"启用"(或"开启"/"设置",不同手机按钮不同)后,手机界面会卡住,Android Studio的最下面的Debug界面也会显示出当前各个变量的值,如下图所示:

            从图中可以看到如下关键变量信息:

            1. action = 3  ->  CF_ACTION_REGISTRATION(注册呼叫转移)

            2. cfReason = 0   ->   CF_REASON_UNCONDITIONAL(无条件转移)

            3. serviceClass = 1   ->   SERVICE_CLASS_VOICE(转移的是语音通话业务)

            4. number = "13011112222" -> 所这设置的呼叫转移号码,即转移给哪个号码

     

            在变量窗口的左边还有代码的Call Stack信息(涉及保密信息,故隐去一部分信息)以及调试按钮,如下图所示:

            上面的四个按钮从左到右分别为:

            1. Step Over: 执行当前行代码后,在下一行代码处断住,即单步调试

            2. Step Info: 单步执行代码,若遇到方法调用,则进入该方法内部

            3. Force Step Info: 单步执行代码,若遇到方法调用,强制进入该方法内部(与Step Info的区别是,比如在调试一个App的代码时,遇到了一个你自己实现的方法,此时两个按钮的效果相同;但如果遇到了一个SDK中实现的方法,如字符串比较或者取子串的方法,这个时候Step Info不会进入,而Force Step Info会进入)

            4. Step Out: 如果你已经使用 Step Info / Force Step Info 进入了某一个方法调用的内部,点击该按钮,则会跳出当前方法(注意: 此处并不是直接跳出,而是执行完当前方法后跳出,即不再在该方法中一句句地断住程序,而在该方法执行完毕后的下一行断住程序)

            5. 如果希望程序继续执行,直到下一个断点处断住,则可以点击最左侧从上往下数的第二个"绿色箭头"按钮

            6. 如果希望结束调试,则可以点击最左侧从上往下数的第四个"红色方块"按钮

     

            以上就是使用Android Studio对系统源码进行调试的方法,希望对大家的开发以及Debug能有所帮助。

     

            PS: 最后说一下,如果"Choose Process"界面在勾选了"Show all processes"后,却依旧没有列出当前运行的进程的话,我们可以从以下这些方面进行check

            1. 查看手机是否是userdebug版本或者eng版本,user版本的手机一般是看不到进程的 (至少我手里的这台不行)。如果确定软件版本没有问题,那么查看"USB调试"选项是否打开

            2. 查看usb端口是否识别了当前手机,以Linux为例,在终端中输入lsusb命令即可看到

            如果无法分辨哪一个是自己的手机,可以拔下手机运行一遍命令,然后插上手机再运行一遍,看是否会多出来一条。

            如果没有识别,可以看看是否是由于USB驱动不正确导致

    xxxxxx@xxxxxx-Ubuntu:~/code/android$ lsusb
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 001 Device 002: ID 03f0:1f4a Hewlett-Packard 
    Bus 001 Device 008: ID 05c6:9091 Qualcomm, Inc.       ---> 这个是我的手机设备 
    Bus 001 Device 003: ID 03f0:2f4a Hewlett-Packard 
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

            3. 按照第2步中的方法,如果可以看到自己的手机设备,那么尝试一下,adb shell是否可以成功连接手机

            如果提示"insufficient permissions for device",可以尝试一下重启adb server

    xxxxxx@xxxxxx-Ubuntu:~/code/android$ adb kill-server
    xxxxxx@xxxxxx-Ubuntu:~/code/android$ adb start-server
    * daemon not running. starting it now at tcp:5037 *
    * daemon started successfully *
    xxxxxx@xxxxxx-Ubuntu:~/code/android$ adb shell
    android:/ $

            如果还是失败,或该方法在重新插拔手机后再次出现问题,请尝试如下方法:

    在/etc/udev/rules.d/目录下
    新建一个文件
    sudo touch 51-android.rules
    编辑该文件
    sudo gedit 51-android.rules
    输入一行内容为
    SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"
    保存
    如果不生效,重启adb server或者电脑尝试

             4. 如果adb shell连接手机没有问题,但还是不出现进程,请查看你的系统源代码是否配置了正确的SDK版本

            点击"File -> Project Structure...",中间的窗口选择"android"(首字母小写的那一个),在弹出的窗口中左边栏中选择"Modules",而后在右边的窗口中选择"Dependencies"。查看Module SDK是否为系统源代码所对应的API版本(如:8.0的代码对应的是API 26,9.0的代码对应的是API 28),如果这里选择的是JDK的版本,如JDK 1.8,请在下拉菜单中更改为Android API。

            如果在下拉菜单中没有找到相应的SDK版本,就打开Android Studio自带的SDK Manager下载即可。

            一般来说,如果以上问题都解决了以后,就可以看到手机当前运行的进程了;如果依旧不能,那么还是求助百度吧T_T...

     

    展开全文
  • android studio 单步调试

    2017-09-14 14:44:03
    简单调试 1. step over:一步步往下走 ...当前程序运行的位置,我们看到i的值...点击单步调试按钮或按快捷键F8,看看效果。这里我们看到selector变量的值已经出来了selector:0,我们在看看黄色位置i的当前值是0。

    简单调试


    1. step over:一步步往下走

    这里写图片描述

    当前程序运行的位置,我们看到i的值已经在程序代码中展示出来了,黄色的代码处,这个是AS的功能,对于我们调试来讲,这简直是非常大的福利了。

    这里写图片描述

    点击单步调试按钮或按快捷键F8,看看效果。这里我们看到selector变量的值已经出来了selector:0,我们在看看黄色位置i的当前值是0。

    这里写图片描述

    这时我们继续F8,我们切换到logcat查看日志,我打印出的i的值是0,

    这里写图片描述

    我们在切回道Debugger面板,可以看到Variables显示面板中,有i的值是0,selector的值是0。以及我们可以看到Frames控制面板中可以显示出当前程序的位置在:onCreate():28,第28行。

    这里写图片描述

    2. step into:看到方法往里走

    比如我们的for循环当中调用了一个stepNext(int i)方法,当我们走到这里想看看这个方法里面的运行过程的时候我们可以这样,当走到这个方法的时候我们可以按下F7,或者如下图的图标。

    这里写图片描述

    这时就走到了stepNext方法当中。

    这里写图片描述

    在这里打印了一个log,我们再按一下F8我们来看看Logcat, 这里我打印的log都是为了做教程用,调试我们就不用打log了直接看显示面板就OK了

    这里写图片描述

    3. force step into :所有方法看完整

    这个是可以看到你所调用的所有方法的实现会让你跟着它走一遍,研究源码使用非常方便

    这里写图片描述

    4. step out :有断点下一个,走完断点继续走

    这里如果我们的一个流程当中,包括调用的方法,如果有断点走到下一个断点,如果没有断点,而是在一个调用的方法当中,会跳出这个方法,继续走。

    这里写图片描述

    这里理解比较难,举个例子:
    这里写图片描述

    (上图)我现在程序位置在第一个断点位置(24行),我调用的stepNext方法中也有一个断点,此时我按下step out按钮会走到stepNext中的断点处(39行)我此时如果再按一下step out 会走到stepNext方法的调用出的下一个可执行代码(30行)

    这里写图片描述

    (上图)如果我现在程序位置在stepNext的方法中,如果我此时按下step out,会走到stepNext方法的调用出的下一个可执行代码(30行)

    5. run to Cursor :下个断点我们见

    这里的意思就是说,会很快执行到下一个断点的位置,而且可以静如任何调用的方法

    这里写图片描述

    二、高级调试


    1. 跨断点调试

    如果我们设置了多个断点,现在我们需要直接跳转到下一个断点,那么直接点击下图就可以了

    这里写图片描述

    2.观察变量

    如果我们想观察1个或者几个变量的值的变化,如果我们在Variables显示面版中观察如果我这里有太多太多的自定义变量和系统变量了,那么就难观察了,我们可以做如下操作:
    点击Watches,点击+号,然后输入变量的名称回车就OK了,而且会有历史记录哦

    这里写图片描述

    如果变量名比较长我们可以这样:
    选择[Variables]中的变量名然后点击[右键],选择[Add to Watches],然后Watches面板中就有了

    这里写图片描述

    3.设置变量的值

    在程序中有很多的条件语句和循环语句,调试也是比较耗时的,我们可以通过快速设置变量的值来加快调试速度,我们可以做如下操作:
    选择[Variables]中的变量名然后点击[右键],选择[Set Value..]或者选择之后直接F2(如上图)(下图为Variables面板)

    这里写图片描述

    4.查看断点

    这里写图片描述

    点击之后我们可以看到所有的断点,以及位置代码,也可以设置一些属性
    这里写图片描述

    5.停止调试

    要注意的是这里的[停止调试]不是让程序停止,而是跳过所有调试
    这里写图片描述

    展开全文
  • 如何在 Android Studio 里单步调试 WebRTC Android 的 native 代码。       WebRTC 代码下载     depot tools 是 chromium 代码库管理工具,包括代码管理、依赖管理、工作流程管理等; Android/Linux、...

    mac环境

     

     

    如何在 Android Studio 里单步调试 WebRTC Android 的 native 代码。

     

     

     

    WebRTC 代码下载

     

     

    • depot tools 是 chromium 代码库管理工具,包括代码管理、依赖管理、工作流程管理等;
    • Android/Linux、Windows、iOS/macOS WebRTC 本身的代码是同一个仓库,但依赖工具不同,所以不可能放到一起,我的移动硬盘里就有 webrtc_android 和 webrtc_ios 两个目录,一共 46 GB;
    • depot tools 的运行基于 python 2.x 环境,且需要是官方 build(--version 选项不能输出额外信息);
    • 各个系统的 buildtools 是需要运行 gclient runhooks 进行下载的,而且是自动检测运行时的系统,只下载当前系统的;
    • gn/clang format 下载地址:https://storage.googleapis.com/chromium-clang-format/0679b295e2ce2fce7919d1e8d003e497475f24a3 , https://storage.googleapis.com/chromium-gn/9be792dd9010ce303a9c3a497a67bcc5ac8c7666 , 替换 hash 值即可,其他 download_from_google_storage 的步骤都可以这样解决(替换 bucket 和 hash);

    顺便说说我下载代码的方式:

    • 首先准备一台可上网的路由器,我的是华硕 RT-AC68U + koolshare 380.63_0-X7.2(升级后 format jffs at next boot 并重启) + 离线安装科学上网插件
    • 然后在阿里云香港开一个按量付费的最低配云主机,0.07 元/小时,流量 1 元/GB,速度很快,能到 MB/s 级别,完整下载花费也不会超过 50 元,下完之后释放;
    • 把配好 ss 及 ss 自启动的镜像做成自定义镜像,并创建创建实例模板,再需要更新代码时一键启动无需配置,只需到路由器后台改下 IP 即可;
    • 有了这个环境之后,也就可以轻松给 WebRTC 提交 patch 了,我都提交了好几个 patch 了

    Xcode 调试 WebRTC iOS demo

     

     

    • src/examples/BUILD.gn 中,搜索 ios_app_bundle("AppRTCMobile"),为其中增加以下内容(bundle id 设置为实际使用的独特 id):

    extra_substitutions = [ "PRODUCT_BUNDLE_IDENTIFIER=com.github.piasy.AppRTCMobile", ]

    • src 目录下执行 gn gen out/xcode_ios_arm64 --args='target_os="ios" target_cpu="arm64"' --ide=xcode;
    • 用 Xcode 打开 src/out/ios/all.xcworkspace,run target 选择 AppRTCMobile,工程文件的设置 target 也选择 AppRTCMobile;

    • 修改 src/examples/objc/AppRTCMobile/ios/Info.plist,设置同样的 bundle id;
    • 在工程文件的 general tab 中,手动选择 Info.plist 为 src/examples/objc/AppRTCMobile/ios/Info.plist;选择了 plist 之后,可能 Xcode 不会显示 bundle id 等信息,这是 Xcode 的一个小 bug,先查看一个其他文件,再查看工程文件,就能看到了;
    • 勾选「Automatically manage signing」,选择合适的 team;
    • 点击 run 即可,和调试普通 iOS app 一样;
    • clean 工程并不会清除 ninja 脚本编译的结果,所以不必担心耗时;
    • 更新代码后,可能需要删掉老的 src/third_party/llvm-build/ 目录,然后执行 gclient run_hooks 下载新的 llvm;
    • 在 examples/objc/AppRTCMobile/ARDAppEngineClient.m 里,修改 kARDRoomServerHostUrl, kARDRoomServerJoinFormat, kARDRoomServerJoinFormatLoopback, kARDRoomServerMessageFormat, kARDRoomServerLeaveFormat 这四个变量的域名为实际部署的 AppRTC server 域名/地址,即可连接自己的 server;

    Android Studio 调试 WebRTC Android demo

     

     

     

    首先,官方有个 issue,讲的就是 Android Studio 的支持,遗憾的是现在还没有解决方案。

     

    但是,不就是编译么,手写一个 CMakeLists.txt 就好了嘛(在此省略描述编写 CMakeLists.txt 过程中解决各种问题的五千字)。

     

    写好了的 CMakeLists.txt 和 build.gradle 就在这里!就在这里!!就在这里!!!超链接文字这么长,应该能点到吧 :)

     

    注:这个 CMakeLists.txt 基于 #24277 提交,且只适配了 arm64-v8a 架构,其他代码版本、架构可能存在问题,不保证可以使用。此外,一定要搭配工程里的 build.gradle 使用,因为还要靠它生成一些代码。

     

    不过 clone 下来之后,别急着用 Android Studio 打开,首先要修改一下 libjingle_peerconnection/build.gradle,设置以下变量:

    • webrtc_repo: WebRTC Android 代码仓库路径;
    • android_jar: Android SDK 的 android.jar 路径;
    • py2: Python 2.x 可执行文件的路径;
    • protoc: protobuf 编译程序的路径,注意它的版本需要和 WebRTC 代码库匹配,我没找到这个程序在代码库里的位置,但我发现用 gn + ninja 编译一次后,会在 out/dir/clang_x64 目录下生成这个程序;

    修改完了 build.gradle 之后也不要着急,还要修改 Android Studio 启动配置,编辑 ~/Library/Preferences/AndroidStudio3.1/studio.vmoptions(替换为正确版本),修改 -Xms, -Xmx, -XX:MaxPermSize, -XX:ReservedCodeCacheSize 这四个参数:

     

    -Xms4096m-Xmx14336m-XX:+UseG1GC-XX:-UseParNewGC-XX:-UseConcMarkSweepGC-XX:MaxPermSize=4096m-XX:ReservedCodeCacheSize=2048m-XX:+UseCompressedOops-XX:-OmitStackTraceInFastThrow-Dsun.io.useCanonCaches=false

     

    最后,还要把 CMakeLists.txt 的内容注释了一部分后再打开,sync 成功后解除一部分注释,再 sync,再解除注释,否则 Android Studio build symbols 一整天也不见完。当然,土豪顶配 MBP 也许可以直接打开。

     

    对了,我使用的 Android Studio 版本是 3.1.4。

     

    好了,为了表达我激动的心情,放上一个录屏视频:

     

     

    macOS 下 用 gn + ninja 编译 WebRTC Android

     

    Android Studio 的调试毕竟只是为了加断点做一些流程分析,而且写出来的 CMakeLists.txt 和 build.gradle 也只能算是一个临时解决方案,靠谱的编译方式,还得是 gn + ninja,

    • 先在 docker 镜像里 sync 好 linux 的版本(直接在 macOS 里下载我猜应该也可以,但我没试过,欢迎大家尝试后分享结果);
    • 创建 src/third_party/android_tools_mac 目录,并把 macOS 的 ndk 和 sdk 放入其中;
    • 修改 src/build/config/android/config.gni:

    declare_args() { android_ndk_root = "//third_party/android_tools_mac/ndk" android_ndk_version = "r16" android_ndk_major_version = 16 android_sdk_root = "//third_party/android_tools_mac/sdk" android_sdk_version = 28 android_sdk_build_tools_version = "27.0.3" android_sdk_tools_version_suffix = "-26.0.0-dev" lint_android_sdk_root = "//third_party/android_tools_mac/sdk" lint_android_sdk_version = 26

    • 修改 src/build/toolchain/gcc_solink_wrapper.py 末尾部分:

    # Finally, strip the linked shared object file (if desired).ifargs.strip:result=subprocess.call(wrapper_utils.CommandToRun([args.readelf[:-7]+"strip",'-o',args.output,args.sofile]))

    • 下载 src/buildtools/mac 下定义版本的 macOS 版的 clang-format 和 gn,下载方法见上文;
    • 本地 build llvm,因为下载的 macOS 版本都没有 llvm-ar 这个程序,build 命令:env LLVM_FORCE_HEAD_REVISION=1 ./src/tools/clang/scripts/update.py;
    • 把 $JAVA_HOME/bin 加到 PATH /usr/bin 的前面,这样找到的就会是正确的 jdk 路径,就能找到 rt.jar 了,否则会报错 No such file or directory: '/System/Library/Frameworks/JavaVM.framework/Versions/A/jre/lib/rt.jar';
    • 确保在 Python 2.x 的 shell 里执行 gn 和 ninja 即可编译;

    Windows 编译和使用静态库

     

     

    • 首先可能会提示 winsock.h 和 winsock2.h 里的符号重定义,这是因为 windows.h 在 winsock2.h 之前被 include 导致的,我们在包含 WebRTC 头文件之前,先 #include winsock2.h 即可;
    • 对 std min max 的使用导致 error C2589: '(' : illegal token on right side of '::' 错误,在项目中增加 NOMINMAX 宏定义即可解决;
    • 对 av_err2str() 的使用会导致 error C4576: a parenthesized type followed by an initializer list is a non-standard explicit type conversion syntax 错误,暂时无解,只能去掉;
    • ninja 编出来的 webrtc.lib 太小(7MB 左右),且 VS 提示文件已损坏……我发誓之前编译成功过一个版本,但后来突然就不行了,已弃疗,不过论坛里的这个帖子也许有用;

     

     

     

     

    https://blog.piasy.com/2018/08/14/build-webrtc/

    展开全文
  • android studio实现jni(C、C++)单步调试方法步骤,配置教程,涉及gradle,jni,key以及so文件位置等,全面精细

    本文主要介绍在android studio下实现jni单步调试时,所需要的配置及其步骤,这些也是本人经过几天折腾慢慢实现的,先提供给大家做参考:

    1,配置是在mac下android studio实现的,主要是gradle版本以及build.gradle文件内容设置。

    记住:NDK需要事先配置好,我是另外下载的NDK包(Ndk-r10e),配置教程请自己寻找,可以通过android studio的sdk管理工具中下载最新版。

    1)主程序app下的build.gradle配置:

    apply plugin: 'com.android.model.application'
    
    model {
        def signconf // <-- 重要
        android {
            compilesdkversion = 23
            buildtoolsversion = "23.0.2"
    
            defaultconfig.with {
                applicationid = "这里写程序包名"
                minsdkversion.apilevel = 10
                targetsdkversion.apilevel = 23
                versioncode = 5
                versionname = "1.0"
            }
        }
    
        android.signingconfigs { // <-- 重要
            create("signrelease") { // <-- 重要
                keyalias = '密匙文件名'
                keypassword = '签名密码1'
                storefile = file('签名文件名.key')
                storepassword = '签名密码2'
                storetype = "jks"  // <-- 重要
                signconf = it // <-- 重要
            }
        }
    
        android.sources {
            main {
                jni {
                    source {
                        srcdir 'libs'  //<--so文件目录
                    }
                }
            }
        }
    
        compileoptions.with {
            sourcecompatibility = javaversion.version_1_7
            targetcompatibility = javaversion.version_1_7
        }
        
        //配置so支持
             android.ndk {
            modulename = "allfree-jni"
            ldlibs += "log"
            abifilters += "armeabi"
            abifilters += "armeabi-v7a"
            abifilters += "x86"
            abifilters += "arm64-v8a"
            abifilters += "x86_64"
            abifilters += "mips"
            abifilters += "mips64"
        }
    
        android.buildtypes {
            release {
                minifyenabled = false
                proguardfiles += file('proguard-rules.pro')
                signingconfig = signconf
            }
            debug {
                minifyenabled = false
                proguardfiles += file('proguard-rules.pro')
                signingconfig = signconf //--重要
            }
        }
    
    }
    
    repositories {
        jcenter()
        mavenCentral()
        maven {
            url "https://raw.githubusercontent.com/umeng/mvn-repo-umeng/master/repository" //这里引用友盟的sdk,可不加
        }
        maven {
            url "http://repo1.maven.org/maven2/"
        }
    }
    //依赖库
    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        compile 'com.alibaba:fastjson:1.2.4'
        compile 'com.android.support:support-v13:23.1.0'
        compile 'com.android.support:recyclerview-v7:23.1.0'
        compile project(':um_update')
        compile 'com.loopj.android:android-async-http:1.4.9'
        compile 'com.makeramen:roundedimageview:2.1.0'
        compile project(':weiboSDK')
        compile project(':android-ViewPagerIndicator')
    }
    


    2)gradle-wrapper.properties配置:

    #Wed Dec 23 10:49:59 CST 2015
    distributionBase=GRADLE_USER_HOME
    distributionPath=wrapper/dists
    zipStoreBase=GRADLE_USER_HOME
    zipStorePath=wrapper/dists
    distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip


    3)全局build.gradle配置:

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            //for jni
            classpath 'com.android.tools.build:gradle:1.3.0'//可忽略
            classpath 'com.android.tools.build:gradle-experimental:0.2.0'
        }
    }
    
    allprojects {
        repositories {
            jcenter()
        }
    }


    4)gradle.properties文件

    # Project-wide Gradle settings.
    
    # IDE (e.g. Android Studio) users:
    # Gradle settings configured through the IDE *will override*
    # any settings specified in this file.
    
    # For more details on how to configure your build environment visit
    # http://www.gradle.org/docs/current/userguide/build_environment.html
    
    # Specifies the JVM arguments used for the daemon process.
    # The setting is particularly useful for tweaking memory settings.
    # Default value: -Xmx10248m -XX:MaxPermSize=256m
    # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
    
    # When configured, Gradle will run in incubating parallel mode.
    # This option should only be used with decoupled projects. More details, visit
    # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
    # org.gradle.parallel=true
    
    android.useDeprecatedNdk=true//必须


    图1:



    图2:


    OK,配置完成,然后选择app-native后,debug-》app-native; 接下来就可以在C或C++文件中打断点开启Jni单步调试模式了,下面是我的项目截图:


    图3:



    图4:



    其他可以参见Android NDK示例:https://github.com/googlesamples/android-ndk

    展开全文
  • 首先需要一台root过的手机,安装好BusyBox工具箱,并连接到一台配置好adb的调试PC。   1、从NDK的prebuild目录下找到对应手机平台的gdbserver,上传到手机,运行游戏,然后运行 gdbserver --attach 127.0.0.1:...
  • 单步调试的支持: 步骤1 :打开模块的build.gradle文件,添加类似如下代码到defaultConfig节点下 ndk {  moduleName "JNI"  stl "stlport_static"  ldLibs "log" } 这里的ldLibs "log"后面会说到, ...
  • 转载:... 下面就以GDB调试Rild为例,来说明如何调试Native进程。 说明 #cmd 表明该命令运行于android设备控制台上 $cmd 表明该命令运行于Linux PC控制台上 (gdb)cmd 表明该命令运行于GDB控制...
  • 1.在程序中添加一个断点 如果所示:在Eclipse中添加了一个程序断点  ...在Eclipse中一共有三种添加断点的方法 ...第一种: 在红框区域右键出现菜单后点击第一项 Toggle Breakpoint 将会在你右键代码的哪一行添加...
  • 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Android学习交流群,群号码:364595326 我们一起学Android! 如果你仔细看完了本文和我给出的链接,那么应该对Debug技术不再陌生了;接下来你可以选择...
  • Eclipse 单步调试

    2017-10-08 10:49:55
    Eclipse 的单步调试1、设置断点在程序里面放置一个断点,也就是双击需要放置断点的程序左边的栏目上。2、调试(1)点击”打开透视图”按钮,选择调试透视图,则打开调试透视图界面,然后先设置断点,按调试按钮则可以...
  • 这种速度最大化,会导致Release版本调试出现有些代码被精简掉,有些代码变量在前后之间 不一致的问题,例如传递指针,指针的地址可能会发生改变。而且在调用第三方库的时候,是没有办法获取到debug版本下的动态或者...
  •  最近在学android NDK开发,折腾了一天,终于能够成功在ADT中设置断点单步调试本地C/C++源代码了。网上关于这方面的资料太少了,而且大都不全,并且调试过程中会出现各种各样的问题,真是很磨人,程序猿就得有耐心...
  • Android ndk 单步调试

    2015-07-27 14:17:38
    1.设置NDK目录 在“Android”配置项上设置下“NDK”,选择NDK后,有一个选项“NDK Location”,这里配置NDK根目录。 如下图:   2.添加NDK支持 Android项目上右键,选择“Android Tools”再添加Native的...
  • 转自:wust小吴的android studio学习----调试---断点调试 Android Studio调试其实也非常方便,一般问题直接通过AS的DDMS的Logcat就可以搞定。AS支持类似Eclipse的DDMS的所有功能。这里要说的是疑难问题的...
  • 最近遇到多起delphi ide无法单步调试的情况,几经折腾无果,只能showmessage,不方便无以言表,但这种情况并不是在所有的项目中出现,当IDE崩溃后出现,在删除项目xxx.dproj文件后,一切OK。 转载于:...
  • Android Studio DeBug调试

    2017-05-20 11:42:33
    Android Studio DeBug额,之前都是用log日志输出,自己想要的东西.搞得代码到处都是Log.i()…突然有一天,,,自己get到了,Android 断点….调试….,世界就变得不一样了….这篇文章,算是自己阅读和实战后的笔记吧~1.adb...
1 2 3 4 5 ... 20
收藏数 4,390
精华内容 1,756
关键字:

单步调试android