我正在尝试调试并逐步执行段错误的Android应用程序.我试过了ndk-gdb,但运气不好.我还提到了Android NDK调试而无法调试我的应用程序.
当我尝试时ndk-gdb --start,我得到:
$ ndk-gdb --start --verbose
Android NDK installation path: /opt/android-ndk-r7
Using default adb command: /opt/android-sdk-linux/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.29
Using final ADB command: '/opt/android-sdk-linux/platform-tools/adb'
Using auto-detected project path: .
Found package name: com.example.native_plasma
ABIs targetted by application: armeabi armeabi-v7a
Device API Level: 10
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi-v7a
Found debuggable flag: true
Found device gdbserver: /data/data/com.example.native_plasma/lib/gdbserver
Using gdb setup init: ./libs/armeabi-v7a/gdb.setup
Using toolchain …Run Code Online (Sandbox Code Playgroud) 将Nexus One连接到运行Snow Leopard的Mac.从Eclipse运行"debug".显示执行
/usr/local/android-ndk-r5b/ndk-build NDK_DEBUG=1
Run Code Online (Sandbox Code Playgroud)
负载Nexus One就好了.然后我尝试运行调试器,以便进入JNI层:
$ $NDK_DIR/ndk-gdb
Run Code Online (Sandbox Code Playgroud)
失败了这些消息:
Invalid attribute name:
package
Invalid attribute name:
package
Invalid attribute name:
package
ERROR: Non-debuggable application installed on the target device.
Please re-install the debuggable version!
Run Code Online (Sandbox Code Playgroud)
所以我检查了bin中的apk,它有
lib/armeabi/gdbserver
Run Code Online (Sandbox Code Playgroud)
看一下ndk-dbg脚本,这条消息意味着它没有尝试在手机上找到gdbserver.所以我试着手工做一些ls命令:
$ adb shell ls /data
opendir failed, Permission denied
Run Code Online (Sandbox Code Playgroud)
所以我看了/ data,权限是771.
到目前为止,我做错了什么?
我正在尝试使用本机函数处理从MediaMetadataretriever抓取的帧中的位图。但我却死机了
SIGNAL 11 (SIGSEGV) at 0x422d8f20 (code=2)
SIGNAL 11 (SIGSEGV) at 0x42311320 (code=2)
Run Code Online (Sandbox Code Playgroud)
我尝试进行日志记录,以查看问题所在。当我调用本机函数时,它似乎崩溃了。下面是我调用的本机函数。
protected Bitmap processFrame(Bitmap l_frame) {
WarnC='a';
int[] rgba = mRGBA;
byte[] src_array =stream;
ByteArrayOutputStream src_stream = new ByteArrayOutputStream();
l_frame.compress(Bitmap.CompressFormat.PNG, 0, src_stream);
src_array = src_stream.toByteArray();
Log.i("test", "ok");
WarnC= processcaller.LaneDetection(mFrameWidth, mFrameHeight, src_array, rgba);
Bitmap bmp = g_frame;
bmp.setPixels(rgba, 0/* offset */, mFrameWidth /* stride */, 0, 0, mFrameWidth,mFrameHeight);
rgba =null;
src_array=null;
return bmp;
}
Run Code Online (Sandbox Code Playgroud)
Log.i("test","ok");
我在网上搜索后立即看到崩溃信号,并看到大多数人说这是分段错误,可能是由于调用未初始化的函数或不存在的函数引起的。但是浏览我的代码,我什么都找不到。有指针吗?