关于android 上 gdb调试进程的方法请参考前一篇文章。
如果 android应用程序 包含动态库调用,程序异常退出后 给出一堆地址,
如
I/DEBUG ( 841): signal 11 (SIGSEGV), fault addr deadbaad
I/DEBUG ( 841): r0 00000000 r1 afd1498d r2 00000027 r3 00000070
I/DEBUG ( 841): r4 afd42328 r5 00000000 r6 00000000 r7 4e6fae30
I/DEBUG ( 841): r8 00100000 r9 a811c2f9 10 4e5fb000 fp 0013cdb8
I/DEBUG ( 841): ip 0000173c sp 4e6fa9d8 lr deadbaad pc afd11f40 cpsr 60000030
I/DEBUG ( 841): d0 400000003eaaaaab d1 3ff0000041f00000
I/DEBUG ( 841): d2 0000000050baf6de d3 0000000000000000
I/DEBUG ( 841): d4 00000007000000b4 d5 3fe999999999999a
I/DEBUG ( 841): d6 3fe000000000000binder: release proc 1047, transaction 109259, not freed
0 d7 3eaaaaab3f800000
I/DEBUG ( 841): d8 0000000000000000 d9 0000000000000000
I/DEBUG ( 841): d10 0000000000000000 d11 0000000000000000
I/DEBUG ( 841): d12 0000000000000000 d13 0000000000000000
I/DEBUG ( 841): d14 0000000000000000 d15 0000000000000000
I/DEBUG ( 841): scr 80000012
根据 pc 地址 及crash的 动态库可以推断出现问题的 代码位置,
利用 gcc 的 命令arm-eabi-addr2line ,从地址到代码位置的定位:
具体例子:比如我的 动态库为 hello.so,把此库放在本地
带 symbols 的android lib目录下,执行
arm-eabi-addr2line
-C-f -e /path/to/lib/with_sysbols/hello.so
afd11f40
上面的afd11f40
为 crash时的pc 地址:
(I/DEBUG
( 841): ip 0000173c sp 4e6fa9d8 lr deadbaad pc afd11f40 cpsr 60000030
注意点:
1. 最好把你的动态苦编译成调试版本(-g)
2. 要把你的动态苦放在android 动态库的
sysbols版本目录下,比如我的机器上目录为:(Eg.)/home/usera/android/out/target/product/generic/symbols/system/lib
分享到:
相关推荐
9. **调试与日志**:在Android上调试FFmpeg代码时,可以通过设置日志级别和使用ffprobe等工具来获取更多信息,帮助排查问题。 10. **持续学习与更新**:由于FFmpeg不断更新,开发者应关注官方发布的最新版本,以便...
这个是Android NDK上调用第三方的动态库的实例,而且代码简单容易理解,非常适合新手学习参考,因为网上很多资源是C2C(Copy to Copy)的,有些还不能运行,容易误导新手,并且还要设置积分,我免积分提供给网友下载...
NDK提供了交叉编译环境,将本地代码编译为可以在Android设备上运行的.so动态链接库。 **二、Eclipse与Android NDK集成** Eclipse作为曾经主流的Android开发IDE,虽然现在已被Android Studio取代,但仍然有开发者...
QQ空间的菜单动画通常包括滑动、淡入淡出、缩放等效果,这些效果可以通过自定义ViewGroup、动画库(如Android的Animation或Animator API)以及手势识别来实现。在这个Demo中,开发者可能已经展示了如何创建一个可...
它可以帮助开发者在模拟器或真实设备上调试应用,特别是在进行性能分析和问题定位时非常有用。 #### 9. Drawable Drawable是Android中的一种资源类型,主要用于存储图像资源,如图标、背景和其他视觉元素。它们是...
首先,`ViewPager`是Android支持库中的一个视图容器,它可以管理一组`Fragment`并根据用户的滚动动作进行切换。`Fragment`代表屏幕上的一个可交互区域,适合在大屏幕和小屏幕设备上复用。在顶部选项卡的场景中,每个...
并且,Java 或者 C/C++ 库还可以分为静态的或者动态的,库或可执行文件既可能是针对设备(本文的“设备”指 的是 Android 系统将被安装的设备,例如某个型号的手机或平板)的也可能是针对主机(本文的“主机”指的是...
通常,我们会在布局的根视图(如LinearLayout或RelativeLayout)上调用`addView()`方法。例如: ```java LinearLayout parentLayout = findViewById(R.id.parent_layout); parentLayout.addView(myButton); ``` 这里...
库提供了一系列的接口,如`getSupportActionBar()`,使得开发者可以在API级别低于11的设备上调用Action Bar的方法。例如,`getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar....
- 当不再需要Bitmap时,确保调用`recycle()`方法进行释放,但要注意不要在使用中的Bitmap上调用此方法。 在压缩包的“PhotosWallDemo”中,可能包含了一个示例应用,演示了上述的一些最佳实践。通过查看和学习这个...
在Android开发中,反射机制是一种强大的工具,它允许我们在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地调用方法或访问私有成员。本项目"MyReflectionTest"专注于探索和理解Android环境下的Java...
Android系统作为开源的移动设备操作系统,其核心库Bionic是针对ARM架构设计的,但在MIPS架构上运行时需要进行相应的优化和修改。本文将详细探讨MIPS架构下的Android 2.1 Bionic与标准版本的主要差异,以揭示这些变化...
通过调用`SetRoundValue()`方法,可以动态地设置圆角的半径,更新`roundWidth`和`roundHeight`的值,从而改变圆角ImageView的弧度。 总结来说,`RoundImageView`类通过重写`draw()`方法,结合Paint和Path对象,实现...
- 使用Android 8.0的API和库。 - 创建虚拟设备(AVD)运行Android 8.0系统进行测试。 - 在模拟器或真实设备上调试应用,确保兼容性和功能正确性。 总之,Android 8.0 SDK的使用对于开发者来说至关重要,它提供了...
**StyleR:编程式设置Android视图样式** 在Android应用开发中,我们通常使用XML资源文件来定义和管理UI元素的样式。然而,有时我们可能需要在运行时动态地更改或设置视图的样式,这正是`StyleR`库的目的所在。`...
同时,Android 提供了多种动画库,如 Android 自带的 Animation 或第三方库如 Lottie,可以方便地实现复杂的动画效果。 5. **JavaApk源码说明.txt**:这个文件可能包含了关于源代码的详细解释,包括代码结构、关键...
1. **添加依赖**:在项目的build.gradle文件中,确保已经包含了对Android Support Library(现在称为AndroidX库)的依赖,例如`implementation 'androidx.fragment:fragment:1.3.0'`。 2. **布局文件**:在XML布局...
1. ADB介绍:ADB是Android开发者工具包(SDK)的一部分,通过USB或无线网络连接,允许开发者在电脑上调试运行在Android设备上的应用。它提供了三个主要功能:设备管理、文件传输和shell命令执行。 2. ADB安装与配置...
在Android设备上调试通过,意味着这个动画不仅在桌面浏览器上表现良好,也能在移动设备上顺畅运行。 对于Android设备,可能需要考虑兼容性问题,因为不同的浏览器可能对HTML5和CSS3的支持程度不同。开发者可能使用...
接着,在需要进行错误处理的Observable上调用`.dogTag()`方法,它会将RxDogTag的功能注入到当前的Observable流中。一旦发生错误,你就能在Logcat中看到带有详细订阅信息的错误日志。 此外,RxDogTag还支持自定义...