Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging Android NDK调试:设备可以';不能打开_Debugging_Android Ndk - Fatal编程技术网

Debugging Android NDK调试:设备可以';不能打开

Debugging Android NDK调试:设备可以';不能打开,debugging,android-ndk,Debugging,Android Ndk,我尝试调试我的本机库已经有一段时间了,但它就是不起作用。本机代码可以工作和编译,但出于优化目的,我确实需要调试本机代码 我已经一步一步地阅读并遵循了许多教程(例如),但我遇到了一些无法解决的错误 我已经设置了Android和C++调试配置,在调试了Android调试配置之后,在加载了库之后(只有一个),它就遇到了断点。我去cygwin,看看我的设备是否被检测到(就是这样)。然后运行: $ ndk-gdb --start --verbose 这给了我以下输出: Android NDK insta

我尝试调试我的本机库已经有一段时间了,但它就是不起作用。本机代码可以工作和编译,但出于优化目的,我确实需要调试本机代码

我已经一步一步地阅读并遵循了许多教程(例如),但我遇到了一些无法解决的错误

我已经设置了Android和C++调试配置,在调试了Android调试配置之后,在加载了库之后(只有一个),它就遇到了断点。我去cygwin,看看我的设备是否被检测到(就是这样)。然后运行:

$ ndk-gdb --start --verbose
这给了我以下输出:

Android NDK installation path: /cygdrive/c/Android/android-ndk/android-ndk-r8
Using default adb command: /cygdrive/c/Android/android-sdk/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.29
Using ADB flags:
Using auto-detected project path: .
Found package name: com.mypackage
ABIs targetted by application: armeabi-v7a
Device API Level: 15
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi-v7a
Using gdb setup init: ./libs/armeabi-v7a/gdb.setup
Using toolchain prefix: /cygdrive/c/Android/android-ndk/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-
Using app out directory: ./obj/local/armeabi-v7a
Found debuggable flag: true
Found device gdbserver: /data/data/com.mypackage/lib/gdbserver
Found data directory: '/data/data/com.mypackage'
Found first launchable activity: .MainActivity
Launching activity: com.mypackage/.MainActivity
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb shell am start -n com.mypackage/.MainActivity
Starting: Intent { cmp=com.mypackage/.MainActivity }
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb shell sleep 2
Found running PID: 6907
Launched gdbserver succesfully.
Setup network redirection
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb shell run-as com.mypackage lib/gdbserver +debug-socket --attach 6907
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb forward tcp:5039 localfilesystem:/data/data/com.mypackage/debug-socket
Attached; pid = 6907
Could not open remote device: Invalid argument.
Detaching process(es): 6907
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb pull /system/bin/app_process obj/local/armeabi-v7a/app_process
2405 KB/s (9852 bytes in 0.004s)
Pulled app_process from device/emulator.
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb pull /system/lib/libc.so obj/local/armeabi-v7a/libc.so
4994 KB/s (286412 bytes in 0.056s)
Pulled libc.so from device/emulator.

User@This-PC /cygdrive/c/Development/MyAppAndroid/trunk/MyApp
$
我可以看到gdbserver已经成功启动,这很好,但我不知道为什么会发生这种情况:

Could not open remote device: Invalid argument
因为adb可以连接到设备(如之前测试的那样)。之后,在我看来(我对CygWin不太精通),GDB只会关闭所有的东西,这也会使Eclipse中的C++调试失败。运行时,出现以下错误:

76-target-select remote localhost:5039
&"Remote communication error: Bad file descriptor.\n"
Remote communication error: Bad file descriptor.
76^error,msg="Remote communication error: Bad file descriptor."
是否有任何东西可以阻止adb检测到我的设备?我用这个设备进行测试(没有C++调试),没有问题。p>
或者问题在于端口错误吗?

我也有同样的问题,所以我替换了ndk gdb文件中的以下行:

原件:

run adb_cmd shell run-as $PACKAGE_NAME lib/gdbserver +$DEBUG_SOCKET --attach $PID & 
run adb_cmd forward tcp:$DEBUG_PORT localfilesystem:$DATA_DIR/$DEBUG_SOCKET 
取代:

run adb_cmd shell run-as $PACKAGE_NAME lib/gdbserver tcp:5888 --attach $PID & 
run adb_cmd forward tcp:5039 tcp:5888
和原件:

run adb_cmd forward tcp:$DEBUG_PORT localfilesystem:$DATA_DIR/$DEBUG_SOCKET 
取代:

run adb_cmd shell run-as $PACKAGE_NAME lib/gdbserver tcp:5888 --attach $PID & 
run adb_cmd forward tcp:5039 tcp:5888
修复了“无效参数”问题


p.

我在您的“教程1”链接中使用了该方法,并且效果很好(针对armeabi-v7a进行了修改)。我注意到您正在调用ndk gdb而不是ndk gdb eclipse,并且使用gdp.setup而不是gdb2.setup。我想你在教程中放弃了这个方法?它的哪一部分对你不起作用?我只是复制了ndk gdb并将其命名为ndk gdb original,并将其命名为我的新文件。与gdb.setup相同。我怀疑这些变化会引起问题,但不是这样。所以我遵循了所有的步骤,就像在教程中一样。不起作用的部分是无法打开远程设备:参数无效,我不知道为什么它没有连接到它,因为在我运行ndk gdb之前,我可以用adb设备检测到该设备。在我的头撞击屏幕数周后,这个解决方案与另一个建议一起工作,将awk更改为ndk gdb脚本中的gawk。谢谢你们两位的帮助。