cjs*_*rio 8 debugging java-native-interface android gdb gdbserver
我正在尝试调试我的应用程序通过JNI使用的本机共享库.我可以使用"gdbserver --attach pid"附加到正在运行的应用程序,但我需要在启动gdbserver命令时实际启动我的应用程序.
这个主题有一百万次博客点击,但似乎没有一个关于你如何推出你的应用程序.他们都说要输入"gdbserver 10.0.2.2:1234 ./MyProgram"但究竟是什么"MyProgram".那是MyProgram.apk吗?是MyProgram.so吗?是否在安装应用程序时创建了其他文件?如果是这样,它的路径是什么?
虽然可以开发独立的应用程序,这些应用程序可以像其他人所描述的那样直接从外壳启动,但听起来您的代码在Android应用程序框架中运行。因此,您没有可执行文件,而是具有一个包含Dalvik类文件以及其他资源(包括本机共享库)的APK。
在APK中启动应用程序涉及几个步骤
虽然无法通过将可执行文件传递给gdbserver来直接启动APK,但使用am命令从外壳触发启动它相当容易。
$ adb -d shell
# am
usage: am [subcommand] [options]
start an Activity: am start [-D] <INTENT>
-D: enable debugging
send a broadcast Intent: am broadcast <INTENT>
start an Instrumentation: am instrument [flags] <COMPONENT>
-r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)
-e <NAME> <VALUE>: set argument <NAME> to <VALUE>
-p <FILE>: write profiling data to <FILE>
-w: wait for instrumentation to finish before returning
start profiling: am profile <PROCESS> start <FILE>
stop profiling: am profile <PROCESS> stop
<INTENT> specifications include these flags:
[-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>]
[-c <CATEGORY> [-c <CATEGORY>] ...]
[-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
[--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
[-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
[-n <COMPONENT>] [-f <FLAGS>] [<URI>]
# am start -n com.android.browser/.BrowserActivity
Starting: Intent { cmp=com.android.browser/.BrowserActivity }
#
Run Code Online (Sandbox Code Playgroud)
应用程序运行后,即可gdbserver --attach <pid>像以前一样使用。如果幸运的话,您的应用程序会在调用本机代码之前等待用户的一些交互,以便您有机会在GDB中附加和设置断点。
| 归档时间: |
|
| 查看次数: |
17890 次 |
| 最近记录: |