使用vs-android构建的Android本地应用程序调试

4
我正在使用vs-android构建本地C++ Android应用程序。我想通过在模拟器上启动gdbserver并连接到该GDB服务器来从命令行进行调试。由于我没有使用Android构建脚本,因此默认情况下不会得到gdbserver。因此,我将gdbserver添加到lib文件夹中,从那里vs-android收集它并将其推送到APK中。当我使用adb install部署应用程序时,该文件现在可以在模拟器的应用程序的lib文件夹中找到,其中也包含我的SO。

我现在尝试使用run-as运行gdbserver,但是我遇到了错误“无法附加到进程924:操作不允许(1)”。

根据此http://ian-ni-lewis.blogspot.com/2011/05/ndk-debugging-without-root-access.html,当使用run-as启动gdbserver时,服务器应该能够附加到进程。

有任何想法,我可能还做错了什么吗?


ndk-gdb脚本就是一个shell脚本,您可以阅读并学习它。看起来您没有正确使用run-as或者它在您的设备上出现了问题(就像我的一个设备一样)。此外,请确保被调试的apk具有Internet权限,因为gdbserver将需要网络套接字,除非您通过unix域套接字代理它。(我会期望不同的错误消息,但是在这个世界上触发误导性消息的错误并不罕见) - Chris Stratton
2个回答

3

adb shell
运行以下命令:
su -c setenforce 0
这将解决问题。


0
为了确定问题是与run-as还是gdbserver有关,请尝试使用run-as执行'ps'而不是gdbserver,然后查看是否将'ps'进程列为具有与应用程序进程相同的用户ID。 如果不是,则您遇到了run-as的问题。 如果它与应用程序的userid相同,则问题更可能是gdbserver引起的。

我已经尝试使用id,确实是与运行我正在调试的应用程序的用户相同。这是我一直在使用的附加到进程的命令行:run-as com.ri.AndroidTests /data/data/com.ri.AndroidTests/lib/gdbserver :1234 --attach 285。 - Timo Heinäpurola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接