当前位置: 首页 > news >正文

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

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。

相关文章:

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

Android NDK开发详解之调试和性能分析的ndk-gdb 要求用法选项 NDK 包含一个名为 ndk-gdb 的 Shell 脚本,可以启动命令行原生调试会话。偏好使用 GUI 的用户则应阅读在 Android Studio 中调试这篇文档。 要求 要运行命令行原生调试,必须满足以下要求&am…...

html获取网络数据,列表展示 一

html获取网络数据&#xff0c;列表展示 js遍历json数组中的json对象 image.png || - 判断数据是否为空&#xff0c;为空就显示 - <!DOCTYPE html> <html><head><meta charset"utf-8"><title>网页列表</title></head><b…...

配置管理工具-Confd

1 简介 1.1 Confd介绍 Confd是一个轻量级的配置管理工具。通过查询后端存储&#xff0c;结合配置模板引擎&#xff0c;保持本地配置最新&#xff0c;同时具备定期探测机制&#xff0c;配置变更自动reload。对应的后端存储可以是etcd&#xff0c;redis、zookeeper等。[1] 通过…...

0基础学习PyFlink——使用DataStream进行字数统计

大纲 sourceMapSplittingMapping ReduceKeyingReducing 完整代码结构参考资料 在《0基础学习PyFlink——模拟Hadoop流程》一文中&#xff0c;我们看到Hadoop在处理大数据时的MapReduce过程。 本节介绍的DataStream API&#xff0c;则使用了类似的结构。 source 为了方便&…...

OpenCV官方教程中文版 —— 图像去噪

OpenCV官方教程中文版 —— 图像去噪 前言一、原理二、OpenCV 中的图像去噪1.cv2.fastNlMeansDenoisingColored()2.cv2.fastNlMeansDenoisingMulti() 前言 目标 • 学习使用非局部平均值去噪算法去除图像中的噪音 • 学习函数 cv2.fastNlMeansDenoising()&#xff0c;cv2.fa…...

AcWing 102. 最佳牛围栏(前缀和+二分+DP)

AcWing 102. 最佳牛围栏 1、问题 2、分析 &#xff08;1&#xff09;暴力做法 看到这道题以后&#xff0c;我们可以先想一个最暴力的做法&#xff0c;就是我们去枚举所有长度至少为 F F F的区间&#xff0c;然后求出这个区间的和&#xff0c;再求出这个区间的平均值。最后在…...

React-表单受控绑定和获取Dom元素

一、表单受控组件 1.声明一个react状态 说明&#xff1a;useState const [value,setValue]useState("") 2.核心绑定流程 2.1绑定react状态 <div><input value{value}type"text"></input> 2.2绑定onChange事件 说明&#xff1a;e.…...

python hashlib模块及实例

hashlib 模块密码加密密码撞库密码加盐 一&#xff0c;hashlib模块 hashlib模块是用来为字符串进行加密的模块&#xff0c;通过该作用就可以为用户的密码进行加密。 通过模块中的hash算法可以为任意长度的字符串加密成长度相同的一串hash值。该hash算法得到的hash值有一下几个…...

垃圾回收GC

为什么要有垃圾回收? JVM之所以要有垃圾回收,是因为它能够自动管理内存,避免内存泄漏和内存溢出的问题,垃圾回收机制会自动检测和清理不再使用的对象,释放内存空间,使得开发者不需要手动管理内存,降低了开发难度和错误风险,同时,垃圾回收还可以优化内存分配,提高程序性能和响…...

kubernetes-service微服务

目录 一、service微服务 二、Ipvs模式 三、ClusterIP 1.ClusterIP 2.headless 四、NodePort 1.NodePort 2.默认端口 五、LoadBalancer 1.LoadBalancer 2.metallb 六、ExternalName 一、service微服务 Kubernetes Service微服务是一种基于Kubernetes的微服务架构&…...

让你笑到不行的笑话短视频接口,快来试试!

11在当今这个快节奏的社会中&#xff0c;笑话成为了许多人调节情绪的有效方法。如今&#xff0c;短视频平台已经成为了最受欢迎的娱乐方式之一&#xff0c;因此&#xff0c;将笑话和短视频结合起来&#xff0c;成为了一种很有趣的方式来带给我们欢乐。今天我们要介绍的是挖数据…...

系列四十五、Spring的事务传播行为案例演示(五)#MANDATORY

一、演示Spring的传播行为&#xff08;MANDATORY&#xff09; 1.1、StockServiceImplMANDATORY /*** Author : 一叶浮萍归大海* Date: 2023/10/30 15:43* Description: 演示MANDAORY的传播行为* 外部不存在事务&#xff1a;抛出异常 No existing transaction found for…...

idea插件(二)-- String Manipulation(字符串处理工具)

目录 1. 安装 String Manipulation 2. 默认快捷键 3. 操作说明 3.1 变量名的形式处理 3.2 文本形式的转化...

HQChart实战教程67-worker批量计算股票指标

HQChart实战教程67-worker批量计算股票指标 什么是Worker批量指标计算示例地址步骤1. 创建一个后台工作线程类2. 发送指标计算任务3. 接收计算结果数据对接 完整源码demo_workerthread_sina.htmlhqchart_worker_sina.js HQChart插件源码地址 什么是Worker Worker 接口是 Web W…...

博客系统自动化测试项目实践

文章目录 一.测试需求分析1.功能分析2.非功能分析 二.制定测试方案&#xff08;计划 策略&#xff09;三.编写测试用例四.执行自动化测试用例五.编写测试报告六.项目总结 一.测试需求分析 1.功能分析 通过功能测试需求分析 2.非功能分析 非功能分析主要从:界面,性能,安全性,…...

软考高级之系统架构师系列之操作系统基础

概念 接口 操作系统为用户提供两类接口&#xff1a;操作一级的接口和程序控制一级的接口。操作一级的接口包括操作控制命令、菜单命令等&#xff1b;程序控制一级的接口包括系统调用。 UMA和NUMA UMA&#xff0c;统一内存访问&#xff0c;Uniform Memory Access&#xff0c…...

制作一个可以arm架构下运行的docker镜像(for Python)

看完本篇文章&#xff0c;你将得到一个可以arm架构下运行的python 基础镜像。 题外话 这里直接说docker镜像有点儿草率&#xff0c;因为目前很多容器都是Podman了。 podman的介绍 arm和aarch傻傻分不清楚 现在这两个是一样的意思了。 arm64和aarch64之间的区别 开始制作镜…...

Goland连接服务器/虚拟机远程编译开发

创建SSH连接 SSH用于与远程服务器建立连接 Settings -> Tools -> SSH Configurations 添加新的ssh连接&#xff0c;Host为ip地址&#xff0c;Username为用户名&#xff0c;认证方式这里选择密码验证 全部填完后可以点击Test Connection测试连接是否成功 创建Deployment…...

大数据Doris(十四):Doris表中的数据基本概念

文章目录 Doris表中的数据基本概念 一、​​​​​​​Row & Column...

【Linux】Linux环境配置以及部署项目后端

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Linux的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Linux环境配置 1.JDK ①上传安装包到…...

为什么你的DeepSeek总漏检重构后代码?4步反混淆预处理法(附LLM辅助去装饰器Python脚本)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek代码重复检测 DeepSeek-R1 模型在训练过程中引入了严格的代码去重机制&#xff0c;其核心目标是消除训练语料中语义等价或高度相似的代码片段&#xff0c;从而提升模型对真实编程模式的学习能力与泛化…...

UnityExplorer:如何在游戏运行时实时调试和修改Unity项目

UnityExplorer&#xff1a;如何在游戏运行时实时调试和修改Unity项目 【免费下载链接】UnityExplorer An in-game UI for exploring, debugging and modifying IL2CPP and Mono Unity games. 项目地址: https://gitcode.com/gh_mirrors/un/UnityExplorer UnityExplorer是…...

独立开发者如何利用Taotoken的TokenPlan在项目初期有效控制AI实验成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何利用Taotoken的TokenPlan在项目初期有效控制AI实验成本 对于独立开发者或学生而言&#xff0c;在构建AI应用原型时&…...

LLM驱动的高性能计算日志解析技术实践

1. 项目概述&#xff1a;LLM驱动的HPC日志解析革命高性能计算(HPC)系统如同数字世界的巨型望远镜&#xff0c;每天产生PB级的观测数据——系统日志。这些日志记录了从硬件底层到应用层的所有活动&#xff0c;但它们的价值长期被埋没在非结构化文本的泥沼中。传统日志解析方法就…...

Unity Spine换装系统:骨骼映射与Skin动态管理实战

1. 为什么Spine换装不能只靠“替换贴图”——一个被低估的骨骼绑定难题 在Unity里做Spine换装&#xff0c;很多人第一反应是&#xff1a;把新衣服的Atlas和SkeletonData拖进去&#xff0c;用 SkeletonRenderer 的 skeletonDataAsset 字段一换&#xff0c;完事。我去年接手一…...

MFCC与可解释机器学习:构建可解释的L2发音AI诊断系统

1. 项目概述&#xff1a;当语音技术遇见二语教学 作为一名在语音技术和教育技术交叉领域摸爬滚打了十多年的从业者&#xff0c;我常常思考一个问题&#xff1a;我们能用算法“听”出一个人说外语时&#xff0c;他的母语口音吗&#xff1f;更进一步&#xff0c;我们能否不仅“听…...

通过用量看板清晰观测Taotoken的API调用成本与消耗

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过用量看板清晰观测Taotoken的API调用成本与消耗 对于将大模型能力集成到产品中的团队而言&#xff0c;API调用成本是项目预算与…...

Awoo Installer:如何用这个免费工具快速安装Switch游戏

Awoo Installer&#xff1a;如何用这个免费工具快速安装Switch游戏 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer Awoo Installer是一款专为Ninte…...

Switch控制器PC适配难题的技术解决方案:BetterJoy架构解析与高级配置指南

Switch控制器PC适配难题的技术解决方案&#xff1a;BetterJoy架构解析与高级配置指南 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: ht…...

三招识别“纪律高危”学生?K-Means聚类助你构建精准考勤画像

助睿实验3 - 学生用户画像 - 考勤主题扩展标签构建第一部分&#xff1a;实验背景1.1实验目的本实验旨在基于已完成的学生考勤主题标签表&#xff0c;掌握使用K-Means聚类算法对学生考勤行为进行自动分群的核心技能。具体任务包括&#xff1a;通过迟到、早退、请假、校服违规次数…...