在Android开发中,涉及到JNI时,有时会报告非常底层栈信息,在栈信息中 仅仅给出了.so文件出错位置的地址,根本看不成问题所在,但是如果使用arm-eabi-addr2line 命令,就可以把地址信息转换成方法名称:
arm-eabi-addr2line 命令 在%ANDROID_SOURCE%\prebuilt\linux-x86\toolchain\arm-eabi-4.4.0\bin;
例如有如下的栈信息:
02-21 13:34:39.621 I/DEBUG ( 79): pid: 394, tid: 560 >>> android.process.media <<<
02-21 13:34:39.621 I/DEBUG ( 79): signal 11 (SIGSEGV), fault addr 4b98b000
02-21 13:34:39.621 I/DEBUG ( 79): r0 4b98a054 r1 00000000 r2 00000e94 r3 4b98b000
02-21 13:34:39.621 I/DEBUG ( 79): r4 00000000 r5 4b989f14 r6 9ea08104 r7 0029b0e5
02-21 13:34:39.621 I/DEBUG ( 79): r8 4b98a564 r9 43ddfc68 10 43ddfc50 fp 00290840
02-21 13:34:39.621 I/DEBUG ( 79): ip 9ea0816c sp 4b9898c8 lr 9ea05393 pc afd1cde6 cpsr 20000030
02-21 13:34:39.621 I/DEBUG ( 79): d0 0000004442880000 d1 3ff0000042880000
02-21 13:34:39.621 I/DEBUG ( 79): d2 bfd3441350baf6de d3 c1493000c1323800
02-21 13:34:39.621 I/DEBUG ( 79): d4 4900000040dcb000 d5 000000000006e580
02-21 13:34:39.621 I/DEBUG ( 79): d6 4515a00000000800 d7 40800000c48ee000
02-21 13:34:39.621 I/DEBUG ( 79): d8 0000000000000000 d9 0000000000000000
02-21 13:34:39.621 I/DEBUG ( 79): d10 0000000000000000 d11 0000000000000000
02-21 13:34:39.621 I/DEBUG ( 79): d12 0000000000000000 d13 0000000000000000
02-21 13:34:39.621 I/DEBUG ( 79): d14 0000000000000000 d15 0000000000000000
02-21 13:34:39.621 I/DEBUG ( 79): scr 80000012
02-21 13:34:39.621 I/DEBUG ( 79):
02-21 13:34:39.661 I/DEBUG ( 79): #00 pc 0001cde6 /system/lib/libc.so
02-21 13:34:39.661 I/DEBUG ( 79): #01 pc 00005390 /system/lib/libdrm1.so
02-21 13:34:39.661 I/DEBUG ( 79): #02 pc 0000321c /system/lib/libdrm1.so
02-21 13:34:39.661 I/DEBUG ( 79):
02-21 13:34:39.661 I/DEBUG ( 79): code around pc:
02-21 13:34:39.661 I/DEBUG ( 79): afd1cdc4 429a3301 2000d1f4 46c0bd30 2a00b510
则执行以下命令:
arm-eabi-addr2line -f -e
%ANDROID_SOURCE%/out/target/product/xxxxx/system/lib/libdrm1.so 00005390
返回结果就是该地址对应的方法名称。
分享到:
相关推荐
这些源码文件可能按照章节或者功能分类,每个文件或目录都对应书中的一个编程实例或问题解决方法。 综合以上信息,我们可以期待在这个源码包中学习到: 1. 编程基础:如何定义变量、控制流程(条件语句、循环)、...
需要在Android.mk或CMakeLists.txt文件中配置编译选项,将本地库编译为适用于不同架构的.so文件,并将其添加到APK的`lib`目录下。然后在Android Studio的`build.gradle`文件中配置NDK支持。 9. **调试JNI** 调试...
这些动态链接库(.so文件)在Android系统启动时被加载,使得RIL能正确地与硬件接口交互,处理来自操作系统的通信请求。 具体来说,"lib64"目录下的库文件可能包含: 1. `libril.so`:这是Android RIL的核心库,实现...
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的...
在开发过程中,如果遇到调用DLL的问题,可以使用调试器(如Visual Studio)设置断点,查看调用栈和变量状态,或者使用`kernel32.dll`的`GetLastError`函数获取错误信息。 通过以上步骤和注意事项,你将能够有效地...
根据压缩包子文件的文件名称列表,我们可以推测项目结构: - "BroadcastClient.aps"和"BroadcastClient.clw"是Visual Studio的工程文件,用于保存项目设置和工作空间信息。 - "BroadcastClientDlg.cpp"和...
- `-l LIBNAME`: 设定编译所需的库名称,例如库文件名为`libxxx.so`,则库名称为`xxx`。 - `-static`: 使用静态链接,编译后的可执行程序不依赖于外部库文件。 - `-O[N]`: 优化编译,提高可执行程序的运行速度,N的...
如果需要在本地调试远程设备产生的core文件,需使用对应平台的GDB版本,并设置正确的共享库搜索路径,例如`solib-search-path /path/to/library`。 总的来说,理解和利用core文件是Linux系统中诊断和修复程序异常的...
TurboLte_code_210224.rar 这个压缩包文件的名称暗示着它可能包含与Turbo LTE相关的代码或程序,日期210224可能指的是2021年2月24日,这可能是代码的更新或发布日期。标签“数字通信”表明内容与使用数字技术进行...
了解 U-Boot-1.3.1 的代码结构,掌握其移植方法。 【实验环境】 1、Ubuntu 7.0.4发行版 2、u-boot-1.3.1 3、FS2410平台 4、交叉编译器 arm-softfloat-linux-gnu-gcc-3.4.5 【实验步骤】 一、建立自己的平台...
通常,它会定义一个或多个`package provide`语句,指定包的名称和版本,以及对应的`source`或`binary`指令,指向库文件。 3. **teapot.txt**:可能是一个包含文档、示例或测试用例的文本文件。"teapot"在Tcl社区中...
在描述中,通过`./configure`命令配置编译选项,例如启用Embed SAPI、指定配置文件扫描目录、设置MySQL支持等,然后使用`make`和`make install`进行编译和安装。安装完成后,确保动态链接库`libphp5.so`被正确放置到...
根据描述“吡so属”,这可能是项目名称或者一种特定的功能描述,但这个词组在标准中文里没有明确的对应含义,可能是输入错误或者是某个特定领域的术语。不过,由于标签指明了“JavaScript”,我们可以推测这个项目是...