检测 Android JNI 代码中的本机内存泄漏

2023-11-27

如何检测Android JNI代码中的内存泄漏?我正在使用弗罗约


2017年更新: valgrind 可用对于安卓。内置的 malloc 调试功能在以下版本中得到了显着扩展:安卓N,对于查找内存泄漏非常有用。您可能需要_exit()应用程序触发转储。

下面描述的 DDMS 功能目前获得了简短提及在官方文档中。


您可以利用一项不受支持的实验性功能。

在您的 DDMS 配置文件中(例如~/.android/ddms.cfg在 Linux 上),添加“native=true”。这将启用“本机堆”选项卡。

接下来,在设备上启用本机堆分配跟踪,并重新启动应用程序框架:

% adb shell setprop libc.debug.malloc 1 
% adb shell stop 
% adb shell start 

(请注意,这需要 root。另请注意,这仅适用于最新版本;在较旧的版本上,您还需要在设备上的 /system/lib 中手动将 libc.so 替换为 libc_debug.so。)

您可以通过在发出简单命令(“adb shell ls”)时观察 logcat 输出来判断设备是否已正确配置。如果你看到:

I/libc    ( 4847): ls using MALLOC_DEBUG = 1 (leak checker)

然后你就知道你已经启用了它。

现在,您可以使用本机堆选项卡功能来获取堆内存使用情况的快照。

DDMS会自动从.../symbols/system/libAndroid 源代码树中的共享库。当然,这要求您拥有完整的 Android 源代码树,并且您的设备正在运行根据它构建的代码。如果不是,则堆栈跟踪无法解码为符号名称,这会降低该功能的实用性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测 Android JNI 代码中的本机内存泄漏 的相关文章

  • 如何快速自动发送FCM或APNS消息?

    我正在开发一项后端服务 通过 FCM 或 APNS 向移动应用程序发送推送通知 我想创建一个可以在一分钟内运行的自动化测试 并验证服务器是否可以成功发送通知 请注意 我不一定需要检查通知是否已送达 只需检查 FCM 或 APNS 是否已成功
  • 在 ViewPager Fragments 中使用 Master/Detail 模板(下载链接)

    工作代码 https github com lukeallison ViewPagerMasterDetail https github com lukeallison ViewPagerMasterDetail Android 主 详细流
  • Android 30+ 中的视频捕获意图 - 只有所有者才能与待处理项目交互

    我正在尝试在我的应用程序上捕获视频 它可以在 android API 30 以下运行 但不能在 30 以上运行 似乎在 sdk 30 之后 android 不允许完全读取外部存储 作用域存储 我目前遇到这个错误 java lang Ille
  • 如何以编程方式检查 AndroidManifest.xml 中是否声明了服务?

    我正在编写一个库 该库提供了一项服务 其他开发人员可以通过将其包含在他们的项目中来使用该服务 因此 我无法控制 AndroidManifest xml 我在文档中解释了要做什么 但一个常见的问题是人们忽略了将适当的 标记添加到其清单中 或者
  • 是否可以将数组或对象添加到 Android 上的 SharedPreferences

    我有一个ArrayList具有名称和图标指针的对象 我想将其保存在SharedPreferences 我能怎么做 注意 我不想使用数据库 无论 API 级别如何 请检查SharedPreferences 中的字符串数组和对象数组 http
  • java.lang.NoClassDefFoundError:org.apache.batik.dom.svg.SVGDOMImplementation

    我在链接到我的 Android LibGDX 项目的 Apache Batik 库时遇到了奇怪的问题 但让我们从头开始 在 IntelliJ Idea 中我有一个项目 其中包含三个模块 Main Android 和 Desktop 我强调的
  • 计数物体和更好的填充孔的方法

    我是 OpenCV 新手 正在尝试计算物体的数量在图像中 我在使用 MATLAB 图像处理工具箱之前已经完成了此操作 并在 OpenCV Android 中也采用了相同的方法 第一步是将图像转换为灰度 然后对其进行阈值计算 然后计算斑点的数
  • 当文本输入聚焦在 React Native for Android 的底部工作表上时,视图移出屏幕

    我正在使用图书馆 https github com osdnk react native reanimated bottom sheet https github com osdnk react native reanimated bott
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 带有 EditText 和 Spinner 的对话框

    我有一个按钮 单击后会弹出一个对话框 我希望对话框有一个EditText and a Spinner对话框内 我不知道如何设置它的视图 我有一个代码AlertDialog它有效 只是EditText and Spinner我需要将其放入其中
  • 如何使用 Cordova 获取当前安装的应用程序的版本?

    我已经找到了应用程序可用性插件 https github com ohh2ahh AppAvailability它主要检查用户是否在其设备上安装了某个应用程序 是否有可能获得应用程序的当前版本 开发者名称 重要 以及所有可能的信息 一般来说
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 发布android后更改应用内购买项目的价格

    在 Google Play 上发布后 是否可以更改应用内购买商品的价格 我假设该应用程序也已发布 完整的在线文档位于http developer android com http developer android com也http sup
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 实现滚动选择 ListView 中的项目

    我想使用 ListView 您可以在其中滚动列表来选择一个项目 它应该像一个 Seekbar 但拇指应该是固定的 并且您必须使用该栏来调整它 我面临的一个问题是 我不知道这种小部件是如何调用的 这使得我很难搜索 所以我制作了下面这张图片 以
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 将两个文本视图并排放置在布局中

    我有两个文本视图 需要在布局中并排放置 并且必须遵守两条规则 Textview2 始终需要完整显示 如果布局中没有足够的空间 则必须裁剪 Textview1 例子 文本视图1 文本视图2 Teeeeeeeeeeeeeeeeeextview1

随机推荐

  • iPhone Facebook SDK 的 Facebook 类有取消方法吗?

    是否有办法取消 Facebook 对象的待处理请求 我在 Facebook h 中找不到任何方法 也找不到访问底层的方法NSURLConnection目的 如果我按回导航栏并且它们是待处理的异步 Facebook 请求 则该请求会尝试将消息
  • 如果可能的话,我应该使用 angularjs $http 服务来请求还是 jquery ajax ?

    在我的项目中 我使用 angularjs 框架并且喜欢使用 http每当我进行 ajax 调用时 都会提供服务 但在项目的某些部分 UI 不是通过 ajax 调用直接更新并且不需要 angularjs 绑定 我应该使用 http服务或普通j
  • 聚合根是否应该在领域驱动设计中实现接口

    我正在开发一个使用领域驱动设计和测试驱动开发的项目 在阅读 Evans 的 DDD 书籍时 我注意到他没有为域中的聚合根定义接口 如果我同时进行 DDD 和 TDD 我是否应该为每个聚合根定义接口以使聚合根类易于测试和模拟 如果是这样 我是
  • 调用 getDrawingCache() 时视图太大,无法放入绘图缓存

    我正在尝试截取 LinearLayout 内容的屏幕截图 该布局包含一个可以具有可变高度 宽度的滚动视图 当布局不太大时 此代码可以正常工作 即您不需要在屏幕上滚动太多来查看所有内容 View v1 LinearLayout theLayo
  • FireMonkey 应用程序中是否有可使用的 Web 浏览器组件?

    对于 Delphi VCL 有TWebBrowser和一些第三方组件 例如TEmbeddedWebBrowser可用于浏览网页 有没有类似的网络浏览器组件 但对于火猴框架在德尔福XE2 最好有 Windows 和 Mac 支持 您可以使用C
  • Angular2订阅理解箭头功能

    我尝试通过以下示例来理解打字稿的箭头函数角2可观察的订阅方法 有人能给我解释一下吗 我有这个有效的代码 this readdataservice getPost subscribe posts gt this posts posts 但如果
  • C#中如何实现多行字符串; VB 的 XML Literals 的替代品?

    我在 vb net 中有一个项目使用XML Literals像这样处理大块 SQL Dim SQL As String a Use test alter table BarFoo alter column CouponName nvarch
  • 如何绑定perl脚本中的每个变量?

    我想看到 perl 脚本中的变量被创建 访问 销毁时的每个地方 使用它可以轻松到达tie or Variable Magic 但是如何在创建变量时自动应用这个魔法呢 您可以查看 B Xref 它会生成应用程序中所有变量的交叉引用列表 基本上
  • 导航视图项目按下时不会响应

    我正在开发一个带有侧导航抽屉的应用程序 抽屉打开得很好 但是据说可以 点击 的文本似乎没有响应 动画显示 当轻敲抽屉时会有反馈 您可以听到声音 但没有任何结果 我尝试放置 toast 消息以查看按钮是否注册了操作 但按下时没有出现 toas
  • JPanel 动作监听器

    我有一个 JPanel 其中有一堆不同的复选框和文本字段 我有一个已禁用的按钮 需要在设置特定配置时启用 我需要的是在整个 JPanel 上寻找事件的监听器 每当发生任何变化时 我相信我需要一个动作侦听器 但我找不到任何东西来桥接动作侦听器
  • “导入错误:没有名为 pwd 的模块”,但它存在

    我正在尝试在本地测试 gae boilerplate 但是当我尝试创建新帐户时 会出现以下错误 奇怪的是 如果我打开 python 解释器并输入 import pwd 它就会起作用 Internal Server Error The ser
  • Objective C 中的悬空指针 - nil 也会释放内存吗?

    我的理解是 当内存未被释放或 释放 时 就会发生内存泄漏 当指针未设置为 nil 并且对象被释放时 就会出现悬空指针 我的问题是 可以将对象设置为 nil 释放内存并清除指针引用吗 i e Car myCar Car alloc initW
  • 需要重构箭头反模式的想法

    我继承了一个怪物 它伪装成 NET 1 1 应用程序处理符合医疗保健索赔支付 ANSI 835 标准的文本文件 但它是一个怪物 正在处理的信息涉及医疗保健索赔 EOB 和报销 这些文件由在前几个位置具有标识符的记录和根据该类型记录的规范格式
  • Go结构体和字节数组之间的转换

    我正在用 Go 编写一个客户端 服务器应用程序 我想在 Go 中执行类似 C 的类型转换 例如 在围棋中 type packet struct opcode uint16 data 1024 byte var pkt1 packet n r
  • 如何在视图内切换视图?

    我正在使用 MVVM 轻型框架制作一个 WPF 应用程序 我想做的是在视图中有一个登录表单 当用户按下该视图中的按钮时 它会为附加的 ViewModel 启动 LoginCommand 从那里我要么想要启动一个包含应用程序其余部分的新窗口
  • 没有可用的 mysql-server 软件包

    我正在尝试在 Amazon Linux 实例上设置 MySQL 我已经尝试了所有方法 也使用 y 选项 sudo yum install mysql server sudo yum install mysql56 server sudo y
  • 从类中删除必需的属性,但 MVC3 仍然不会在文本框中没有值的情况下发布表单

    我有课 在某一时刻 我使用 System ComponentModel 将类的属性设置为 Required 好吧 然后我意识到这是没有必要的 我已经删除了所需的属性 但是当我尝试将表单提交到 ActionResult 时 表单不会发布 并且
  • C# - 通过进程名称的一部分来终止进程

    我正在寻找如何在 C 中执行此操作 如下所示 foreach Process proc in Process GetProcessesByName cheatengine x86 64 proc Kill 我正在使用这个语句 但是该程序有不
  • 销毁并重新创建一个对象是否会使指向该对象的所有指针无效?

    这是后续这个问题 假设我有这样的代码 class Class public virtual method this gt Class new this Class Class object new Class object gt metho
  • 检测 Android JNI 代码中的本机内存泄漏

    如何检测Android JNI代码中的内存泄漏 我正在使用弗罗约 2017年更新 valgrind 可用对于安卓 内置的 malloc 调试功能在以下版本中得到了显着扩展 安卓N 对于查找内存泄漏非常有用 您可能需要 exit 应用程序触发