在本机库中调试崩溃的最简单方法,由 Android 应用程序链接?

2024-01-18

我已将几个低级 C 库移植并创建到 Android,以便在我的应用程序中使用。我使用 NDK 交叉编译它们,然后使用 System.loadLibrary() 链接到它们。一段时间后,我的应用程序崩溃了,似乎是由于库中的错误:

07-28 11:31:21.675: INFO/DEBUG(2880): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
07-28 11:31:21.675: INFO/DEBUG(2880): Build fingerprint: 'verizon/voles/sholes/sholes:2.2.2/FRG83G/91102:user/release-keys'
07-28 11:31:21.675: INFO/DEBUG(2880): pid: 2893, tid: 2894  >>> com.gnychis.coexisyst <<<
07-28 11:31:21.675: INFO/DEBUG(2880): signal 11 (SIGSEGV), fault addr 2d4eedb4
07-28 11:31:21.675: INFO/DEBUG(2880):  r0 2d4eeda4  r1 00000000  r2 00000024  r3 00000000
07-28 11:31:21.675: INFO/DEBUG(2880):  r4 00d3e770  r5 00000000  r6 4184ff98  r7 4184ffa4
07-28 11:31:21.675: INFO/DEBUG(2880):  r8 100ffad0  r9 4184ff9c  10 4184ff84  fp 100ffe30
07-28 11:31:21.675: INFO/DEBUG(2880):  ip 85b7efec  sp 100ffa88  lr 845d13f8  pc 845f8c38  cpsr 60000010
07-28 11:31:21.675: INFO/DEBUG(2880):  d0  6472656767756265  d1  4472fb3844714069
07-28 11:31:21.675: INFO/DEBUG(2880):  d2  4186eeec4186ee6e  d3  4186ef544186ef74
07-28 11:31:21.675: INFO/DEBUG(2880):  d4  4186ef544186ef20  d5  418998f84186ef88
07-28 11:31:21.675: INFO/DEBUG(2880):  d6  418999604189992c  d7  418999c841899994
07-28 11:31:21.675: INFO/DEBUG(2880):  d8  0000000000000000  d9  0000000000000000
07-28 11:31:21.675: INFO/DEBUG(2880):  d10 0000000000000000  d11 0000000000000000
07-28 11:31:21.675: INFO/DEBUG(2880):  d12 0000000000000000  d13 0000000000000000
07-28 11:31:21.675: INFO/DEBUG(2880):  d14 0000000000000000  d15 0000000000000000
07-28 11:31:21.675: INFO/DEBUG(2880):  d16 0113580000000001  d17 3fe999999999999a
07-28 11:31:21.675: INFO/DEBUG(2880):  d18 42eccefa43de3400  d19 3fe00000000000b4
07-28 11:31:21.675: INFO/DEBUG(2880):  d20 4008000000000000  d21 3fd99a27ad32ddf5
07-28 11:31:21.675: INFO/DEBUG(2880):  d22 3fd24998d6307188  d23 3fcc7288e957b53b
07-28 11:31:21.675: INFO/DEBUG(2880):  d24 3fc74721cad6b0ed  d25 3fc39a09d078c69f
07-28 11:31:21.675: INFO/DEBUG(2880):  d26 0000000000000000  d27 0000000000000000
07-28 11:31:21.675: INFO/DEBUG(2880):  d28 0000000000000000  d29 0000000000000000
07-28 11:31:21.675: INFO/DEBUG(2880):  d30 0000000000000000  d31 0000000000000000
07-28 11:31:21.675: INFO/DEBUG(2880):  scr 80000012
07-28 11:31:21.753: INFO/DEBUG(2880):          #00  pc 005f0c38  /data/data/com.gnychis.coexisyst/lib/libtshark.so
07-28 11:31:21.761: INFO/DEBUG(2880):          #01  pc 005c93f4  /data/data/com.gnychis.coexisyst/lib/libtshark.so
07-28 11:31:21.761: INFO/DEBUG(2880):          #02  pc 00001dd2  /data/data/com.gnychis.coexisyst/lib/libwireshark_helper.so
07-28 11:31:21.761: INFO/DEBUG(2880):          #03  pc 00001d9a  /data/data/com.gnychis.coexisyst/lib/libwireshark_helper.so
07-28 11:31:21.761: INFO/DEBUG(2880):          #04  pc 00016e34  /system/lib/libdvm.so
07-28 11:31:21.761: INFO/DEBUG(2880):          #05  pc 000452c4  /system/lib/libdvm.so
07-28 11:31:21.761: INFO/DEBUG(2880):          #06  pc 0001bd98  /system/lib/libdvm.so
07-28 11:31:21.761: INFO/DEBUG(2880):          #07  pc 00022794  /system/lib/libdvm.so
07-28 11:31:21.761: INFO/DEBUG(2880):          #08  pc 00021634  /system/lib/libdvm.so
07-28 11:31:21.761: INFO/DEBUG(2880):          #09  pc 0005c5cc  /system/lib/libdvm.so
07-28 11:31:21.761: INFO/DEBUG(2880):          #10  pc 0005c7fc  /system/lib/libdvm.so
07-28 11:31:21.761: INFO/DEBUG(2880):          #11  pc 0005203e  /system/lib/libdvm.so
07-28 11:31:21.761: INFO/DEBUG(2880):          #12  pc 000520ca  /system/lib/libdvm.so
07-28 11:31:21.761: INFO/DEBUG(2880):          #13  pc 000525a0  /system/lib/libdvm.so
07-28 11:31:21.769: INFO/DEBUG(2880):          #14  pc 0004f9ec  /system/lib/libdvm.so
07-28 11:31:21.769: INFO/DEBUG(2880):          #15  pc 00010ed4  /system/lib/libc.so
07-28 11:31:21.769: INFO/DEBUG(2880):          #16  pc 000109c0  /system/lib/libc.so
07-28 11:31:21.769: INFO/DEBUG(2880): code around pc:
07-28 11:31:21.769: INFO/DEBUG(2880): 845f8c18 ebfda8d5 eaffffdf e5950014 e3500000
07-28 11:31:21.769: INFO/DEBUG(2880): 845f8c28 0affffdc ebfdc232 eaffffda e92d4070
07-28 11:31:21.769: INFO/DEBUG(2880): 845f8c38 e5904010 e1a05000 e3540000 0a000004
07-28 11:31:21.769: INFO/DEBUG(2880): 845f8c48 e5940000 ebfdac25 e5944004 e3540000
07-28 11:31:21.769: INFO/DEBUG(2880): 845f8c58 1afffffa e1a00005 e8bd4070 eafdd2ef
07-28 11:31:21.769: INFO/DEBUG(2880): code around lr:
07-28 11:31:21.769: INFO/DEBUG(2880): 845d13d8 e1a01003 eafe72bb e92d4010 e1a04000
07-28 11:31:21.769: INFO/DEBUG(2880): 845d13e8 e2800008 ebfe4c98 e5940000 ebfe4a3b
07-28 11:31:21.769: INFO/DEBUG(2880): 845d13f8 e5940004 e3500000 0a000001 e8bd4010
07-28 11:31:21.769: INFO/DEBUG(2880): 845d1408 eafe7322 e8bd8010 e92d4010 e1a04000
07-28 11:31:21.769: INFO/DEBUG(2880): 845d1418 ebfe690a e1a00004 e8bd4010 eafe46d2
07-28 11:31:21.769: INFO/DEBUG(2880): stack:
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa48  afd43724  /system/lib/libc.so
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa4c  00000004
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa50  00d417e0  [heap]
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa54  00000008
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa58  00000000
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa5c  afd10280  /system/lib/libc.so
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa60  00d417e0  [heap]
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa64  00000000
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa68  0024a330  [heap]
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa64  00000000
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa68  0024a330  [heap]
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa6c  00000001
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa70  00000008
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa74  00000000
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa78  00d3e778  [heap]
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa7c  8063b4af  /system/lib/libglib-2.0.so
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa80  df002777
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa84  e3a070ad
07-28 11:31:21.769: INFO/DEBUG(2880): #00 100ffa88  00d3e770  [heap]
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa8c  00000000
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa90  4184ff98
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa94  845d13f8  /data/data/com.gnychis.coexisyst/lib/libtshark.so
07-28 11:31:21.769: INFO/DEBUG(2880): #01 100ffa98  100ffaf0
07-28 11:31:21.769: INFO/DEBUG(2880):     100ffa9c  80d01dd5  /data/data/com.gnychis.coexisyst/lib/libwireshark_helper.so

首先,我不完全确定如何正确解释它,以及是否有任何内存地址实际上对我有用。例如,我可以获取内存地址并确定故障发生在哪个函数中吗?根据堆栈,哪个库发生了故障?

该错误需要一些时间才会发生,因此单步调试代码似乎有点棘手。有没有办法获得核心转储或其他东西?我尝试使用本机代码中的日志消息,但日志消息对我缩小问题范围没有足够的帮助。


如果您的应用程序在本机代码中确实崩溃了,我强烈建议您执行以下操作:

  1. 设置一个 java 断点,该断点将在加载本机库之后但开始执行之前被命中。
  2. 转到终端并启动 ndk 版本的 gdb(称为“ndk-gdb”)。最初,只需输入“c”即可继续。
  3. 回到java中,继续执行。
  4. 一旦您的应用程序崩溃,gdb 将暂停,您可以通过“bt”命令(回溯)检查本机代码中堆栈的完整性。

无论如何,您应该能够完全调试本机代码并通过 ndk-gdb 捕获问题。您可以在 ndk 的本地安装中找到有关 ndk 的 gdb 版本的特定文档(例如,在我的计算机上,它位于此处):

android-ndk-r6/documentation.html

最后,这是一个关于gdb的基础教程:

gdb教程 http://goo.gl/Vd4dW

希望这可以帮助!

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

在本机库中调试崩溃的最简单方法,由 Android 应用程序链接? 的相关文章

随机推荐

  • 为什么对于具有 float:left 样式的 li ,浏览器将 ul 元素的高度计算为 0?

    在要点中呈现的代码中 https gist github com 1341600 https gist github com 1341600我正在尝试使用 ul li 元素将一些搜索表单元素 而不是表格 分组在一起 当检查浏览器 带有 fi
  • Java Swing:如何将多个 JPanel 添加到 JScrollPane

    我在网上读到要将组件添加到 JscrollPane 我们必须执行 scrollPane getViewport setView jpanel 嗯 这是我的代码 为了显示多个组件 在本例中为 JButton 我尝试将它们添加到多个 JPane
  • 在 Hadoop MapReduce 脚本中导入外部库

    我正在 Amazon EMR Hadoop 实现之上运行 python MapReduce 脚本 从主脚本中 我得到了项目的相似性 在善后步骤中 我想将此输出拆分到每个项目的单独 S3 存储桶中 因此每个项目存储桶都包含与其类似的项目列表
  • C# 中的事务

    首先 这不是一篇关于数据库事务的文章 我想了解更多关于交易模型 http msdn microsoft com en us library ms172152 aspx在 NET 2 0 及更高版本中 由于我正在针对 NET 3 5 进行开发
  • Lua中的userdata和lightuserdata是什么?

    Lua中的userdata和lightuserdata是什么 我哪里需要它 一段时间以来 我一直在尝试解决它 但我似乎找不到任何我真正理解的教程 解释 为什么需要它们 为什么不能直接将 C 函数绑定到 Lua 元表 用户数据是任意大小和内容
  • 如何更改 Swagger-ui URL?

    我尝试更改 swagger URL 现在我有 http localhost 8080 context root rest swagger ui html http localhost 8080 context root rest swagg
  • is 和 = 有什么区别?

    我已将这些语句输入到序言解释器中 但对结果感到困惑 他们不应该返回同样的东西吗 真的 1 7 5 2 false 2 7 is 5 2 true 没有为什么 2并不意味着assign在 Prolog 中 而是unify 统一算法根本不知道算
  • 使用 Spring Web 服务客户端解密消息

    第350章 赏金和华夫饼给可以帮助我的人 我一直在挣扎Spring http en wikipedia org wiki Spring FrameworkWeb 服务加密好几天了 我不知道如何让 Spring 对消息正文的加密起作用 每当我
  • F# 惰性像素读取

    我想将图像像素延迟加载到 3 维整数数组中 例如 以简单的方式 它看起来像这样 for i 0 to Width for j 0 to Height let point image GetPixel i j pixels 0 i j lt
  • 如何实现从左侧滑动的侧边菜单?

    我是 Flutter 新手 刚刚完成入门教程 我想创建一个侧边菜单 当您滑动时它会从左侧出现 就像 Android 上的 Gmail 不幸的是 我在文档中找不到这样的布局 并且 flutter gallery 中的示例有点混乱 有人可以解释
  • 使用 C++ 将曲线重新采样为均匀长度的段

    使用 C 将曲线重新采样为均匀长度段的最佳方法是什么 我拥有的是代表二维曲线的一组点 在下面的示例中 我有一个带有 x 和 y 分量的点结构以及带有测试位置的点向量 每对点代表曲线上的一段 重采样曲线示例如下图所示 红色圆圈是原始位置 绿色
  • 递增并检查 XSLT 中的计数器变量

    我在分配计数器变量并递增它然后检查 XSLT 中的某个值方面没有什么困难 这是我的代码
  • 如何取消订阅应用程序的所有 Facebook 页面 Webhook

    我有一个 Facebook 应用程序 订阅了 20 000 多个页面 服务器无法处理来自所有这些 Facebook 页面的挂钩 我想从所有这些 Facebook 页面取消订阅我的应用程序 有没有更快的方法来做到这一点 我拥有的大部分页面访问
  • 从演示应用程序内部获取 Android 库模块版本号

    我可以通过编程方式获取我的应用程序的版本名称 例如this https stackoverflow com a 21119027 3681880 String versionName BuildConfig VERSION NAME 1 0
  • 将 MySQL 中的列从 int 更改为 double?

    基本上 我目前在MySQL表中有一个列 它是一个int 我想把它改成双倍 我在网上搜索过 但它提出的只是从列中获取值时进行转换 例如将某些日期转换为日期 但这不是我的意思 我猜这是 Alter Table 的问题 我在 MySQL 开发页面
  • RequestDispatcher.forward() 到“/WEB-INF”下的资源在 WebSphere 中不起作用

    在我的一个 servlet 中 我调用RequestDispatcher forward 调用 WEB INF 文件夹下某处的静态资源 request getRequestDispatcher WEB INF some path image
  • Twitter 的 Java/Grails 库:JTwitter、Twitter4J 或 Grails 插件?

    我正在寻求将一个新应用程序 将要构建 可能在 Grails 中 与 Twitter 集成 并发现 至少 有 3 个库可供使用 JTwitter http www winterwell com software jtwitter php 推特
  • C++根据条件初始化变量[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我目前正在尝试弄清楚如何根据条件初始化变量 这是我要修改的当前代码 int dimsOut 4 dimsOut 0 data gt nDat
  • 重写 ASP.NET MVC 3 RC 中的默认 EditorFor 模板选择

    我正在创建一个 MVC 应用程序 当前使用 EditorFor 生成大量视图 整个视图基本上只是一个 EditorForModel 而且效果很好 然而 我遇到了一个小问题 我似乎找不到解决方案 重要的是它按照我需要的方式工作 那就是在尝试渲
  • 在本机库中调试崩溃的最简单方法,由 Android 应用程序链接?

    我已将几个低级 C 库移植并创建到 Android 以便在我的应用程序中使用 我使用 NDK 交叉编译它们 然后使用 System loadLibrary 链接到它们 一段时间后 我的应用程序崩溃了 似乎是由于库中的错误 07 28 11