Android NDK开发详解之调试和性能分析的ndk-gdb

news2024/11/28 7:43:21

Android NDK开发详解之调试和性能分析的ndk-gdb

    • 要求
    • 用法
    • 选项

NDK 包含一个名为 ndk-gdb 的 Shell 脚本,可以启动命令行原生调试会话。偏好使用 GUI 的用户则应阅读在 Android Studio 中调试这篇文档。

要求

要运行命令行原生调试,必须满足以下要求:

使用 ndk-build 脚本构建您的应用。ndk-gdb 脚本不支持使用旧的 make APP= 方法进行构建。
在 AndroidManifest.xml 文件中添加可将 android:debuggable 属性设为 true 的 元素,从而在该文件中启用应用调试。
构建可在 Android 2.2(Android API 级别 8)或更高版本上运行的应用。
在搭载 Android 2.2 或更高版本的设备或模拟器上进行调试。就调试而言,在 AndroidManifest.xml 文件中声明哪个目标 API 级别并不重要。
在 Unix shell 中开发您的应用。在 Windows 上,请使用 Cygwin 或实验性 ndk-gdb-py Python 实现。
使用 GNU Make 3.81 或更高版本。

用法

要调用 ndk-gdb 脚本,请切换到应用目录或该目录下的任何目录。例如:

cd $PROJECT
$NDK/ndk-gdb

其中, P R O J E C T 指向您项目的根目录, PROJECT 指向您项目的根目录, PROJECT指向您项目的根目录,NDK 指向 NDK 安装路径。

调用 ndk-gdb 时,它会配置此会话以查找您的源文件以及所生成的原生库的符号/调试版本。成功附加到您的应用进程后,ndk-gdb 会输出一长串错误消息,表示无法找到各种系统库。这很正常,因为您的主机并未在目标设备上包含这些库的符号/调试版本。您可以放心地忽略这些消息。

接下来,ndk-gdb 会显示一个正常的 GDB 提示。

您可能熟悉与 GNU GDB 的互动方式,与 ndk-gdb 的互动方式与之相同。例如,您可以使用 b 设置断点,并使用 c(表示“continue”)继续执行。有关完整的命令列表,请参阅 GDB 手册。如果您更喜欢使用 LLDB 调试程序,请在调用 ndk-gdb 脚本时使用 --lldb 选项。

请注意,如果您退出 GDB 提示,那么您正在调试的应用进程将停止。此行为是一种 gdb 限制。

ndk-gdb 可处理许多错误情况,并会在发现问题时显示可提供有用信息的错误消息。这些检查包括确保满足以下条件:

确保 ADB 位于您的路径中。
确保您的应用已在其清单中声明为可调试。
确保设备上安装的具有相同软件包名称的应用同样可调试。
默认情况下,ndk-gdb 会搜索已在运行的应用进程;如果没有搜索到,则会显示相应的错误。不过,您可以使用 --start 或 --launch= 选项在调试会话前自动启动您的 Activity。有关详情,请参阅选项。

选项

要查看完整的选项列表,请在命令行中输入 ndk-gdb --help。表 1 显示了许多比较常用的选项及其简要说明。

表 1. 常用 ndk-gdb 选项及其说明。

在指定了此选项的情况下启动 ndk-gdb,将会启动应用清单中列出的第一个可启动 Activity。使用 --launch= 可启动下一个可启动的 Activity。要转储可启动 Activity 的列表,请从命令行运行 --launch-list。

在这里插入图片描述
在这里插入图片描述

注意:此表中的最后三个选项仅适用于 ndk-gdb 的 Python 版本。

线程支持
如果运行应用的平台版本低于 Android 2.3(API 级别 9),ndk-gdb 就无法正确调试原生线程。调试程序只能调试主线程,abd 会完全忽略其他线程的执行。

如果您在非主线程上执行的函数上放置一个断点,则程序将退出,而 GDB 将显示以下消息:

Program terminated with signal SIGTRAP, Trace/breakpoint trap.
The program no longer exists.
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。

最后更新时间 (UTC):2021-01-05。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1160297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络】网络层讲解

IP协议 前言正式开始IP协议报文第一行报文的封装和分离4位版本8位服务类型 第三行生存时间TTL检验和8位协议 32位源IP和32位目的IP第二行数据分片16位标识3位标志13位片偏移 网段划分网络分段的好处如何进行网络划分老版本的ABCDE新版本的CIDR特殊的IP地址IP地址的数量限制 私有…

2127. 参加会议的最多员工数 (困难,基环内向树,拓扑排序)

思路: 将每个员工作为节点,喜欢的关系作为边,显然是能够组成若干张连通图的,关键就在于如何理解一张图首先要证明:任何一个第一步构成的图必是一个有且仅有一个环的连通图(如下面图片所示,也称…

智能升降压模块

退耦电容 铝电解电容——用较小的成本获得更大的容值,但是等效电阻也大,内部有电解液的 固态电容——聚合物组成,即使失效也不会出现漏液着火等情况 选取时需要考虑精度容值,额定电压大小 一般额定电压要留有1.5倍~2倍的余量&…

生产管理系统流程是什么?

生产管理系统流程是什么? 接下来我就以我们公司正在用的简道云生产管理系统为例,为大家演示生产管理系统的流程 这是我们团队搭建的模板,需要的可以自取,可以直接使用,也可以在模板的基础上自行搭建 生产管理系统模板…

DC系列 DC:2

DC:2 文章目录 DC:2信息收集IP收集网页收集 rbash绕过提权 信息收集 IP收集 使用arp-scan 对网段进行扫描 得到目标机ip之后使用nmap -A -p- -sV -sT 10.4.7.21对该ip进行详细扫描 可以看到该目标机开放着ssh和http服务得到端口7744和80 网页收集 访问网页发现无法访问 …

操作系统 day01(概念和功能)

一. 操作系统的概念 二. 操作系统的功能和目标 作为系统资源的管理者 向上层提供方便易用的服务 操作系统给普通用户使用的接口 GUI/图形化界面联机命令接口/交互式命令接口:用户说一句,系统跟着做一句,如CMD脱机命令接口/批处理命令接口&a…

一个女软件测试工程师3年的坎坷之路

绝大多数测试工程师都是从功能测试做起的,工作忙忙碌碌,每天在各种业务需求学习和点点中度过,过了好多年发现自己还只是一个功能测试工程师。 随着移动互联网的发展,从业人员能力的整体进步,软件测试需要具备的能力要…

ATFX汇市:日本央行放松长债收益率控制,USDJPY距离历史最高价仅一步之遥

ATFX汇市:10月31日,日本央行货币政策会议结果显示:维持短期利率-0.1%不变;把10年期日本国债收益率的目标水平维持在0%左右,同时进行收益率曲线控制,上限为1%,这一收益率将作为参考,主…

【Python爬虫】selenium4新版本使用指南

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera&am…

基于springboot实现疫情防控期间外出务工人员信息管理系统项目【项目源码+论文说明】

基于springboot疫情防控期间外出务工人员信息管理系统 摘要 网络的广泛应用给生活带来了十分的便利。所以把疫情防控期间某村外出务工人员信息管理与现在网络相结合,利用java技术建设疫情防控期间某村外出务工人员信息管理系统,实现疫情防控期间某村外出…

【小白专用】PHP array_push() 函数

PHP array_push() 函数 首先创建一个数组,然后使用array_push()函数依次添加了2个元素,并使用print_r()打印出了结果。可以看到,新添加的元素都已经被成功插入到了数组的末尾。 向数组尾部插入 "blue" 和 "yellow"&…

云安全—kubelet攻击面

0x00 前言 虽然说总结的是kubelet的攻击面,但是在总结攻击面之前还是需要去了解kubelet的基本原理,虽然说我们浅尝即止,但是还是要以能给别人讲出来为基本原则。 其他文章: 云安全—K8s APi Server 6443 攻击面云安全—K8S API Server 未授…

使用doxygen分析MCAL源码的层次架构-基于YTM32

使用doxygen分析MCAL源码的层次架构-基于YTM32 文章目录 使用doxygen分析MCAL源码的层次架构-基于YTM32引言准备和安装软件生成Call Graph配置Wizard > Project页面配置Wizard > Mode页面配置Expert > Project页面配置Expert > Build页面配置Expert > Dot页面分…

vue3视频大小适配浏览器窗口大小

目标:按浏览器窗口的大小,平铺视频,来适配屏幕的大小。 考虑使用 DPlayer.js、video.js、vue-video-player等视频插件,但报了各种各样的错;试过使用 js 对视频进行同比例放大,再判断其与窗口的大小取最小值…

纯CSS实现跑马灯效果,CSS动画知识是该补一补了

前言 最近看一个网站的时候,发现一个效果类似于广告灯的感觉,挺不错的,于是就想用纯CSS来实现这个效果,顺便提升一下自己的CSS动画技能。 分析 我们先分析怎么做的,这个效果分成两个部分: 上层&#xff…

matplotlib画刻度为对数的图

1. 代码 import matplotlib.pyplot as plta [1000,2000,3000,4000,5000] a_x [1, 2, 3, 4, 5] b [0.00001,0.00025,0.001,0.005,0.000001]plt.figure(figsize(10, 6)) plt.plot(a_x, b, cred, labellabel) plt.scatter(a_x, b, cblue) plt.xlabel(step$(\\times 10^3)$) pl…

【MySQL索引与优化篇】数据库设计实操(含ER模型)

数据库设计实操(含ER模型) 文章目录 数据库设计实操(含ER模型)1. ER模型1.1 概述1.2 建模分析1.3 ER 模型的细化1.4 ER 模型图转换成数据表1. 一个实体转换成一个数据库表2. 一个多对多的关系转换成一个数据表3. 通过外键来表达1对…

栅栏密码fence cypher

f{_wi3_hlyk_lnceaonr_cirgu04fep} flag{you_kn0w_r4il_f3nce_cipher}

世界坐标系投影到像素坐标系【python实验】

对于三维视觉而言,需要清晰了解世界坐标系和像素坐标系的对应关系。本文用python做实验。 相机内外参数的数学推导可以看我之前的博客《【AI数学】相机成像之内参数 》,《【AI数学】相机成像之外参数》。 实验开始 首先明确相机的内外参数: …

AI智能识别如何助力PDF,轻松实现文档处理?

AI智能识别如何助力PDF,轻松实现文档处理? 随着科技的不断发展,人工智能(AI)在各个领域都发挥着重要的作用。其中,文档智能( Document AI )在金融、医疗、教育、保险、能源、物流等…