我做的第一步开发原生Android和需要一些帮助。我复制armv7 gdbserver到我的手机和编译“hello word”测试应用程序编写的C++。现在我想调试我的应用程序与gdb从android ndk包。
我启动gdb并通过target remote命令连接到手机,并获得此消息,并在“s”命令gdb持有。
(gdb) target remote 192.168.1.157:1235
Remote debugging using 192.168.1.157:1235
Reading /data/local/Test from remote target...
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
Reading /data/local/Test from remote target...
Reading symbols from target:/data/local/Test...done.
Reading /system/bin/linker from remote target...
Reading /system/bin/linker from remote target...
Reading symbols from target:/system/bin/linker...(no debugging symbols found)...done.
0xb6fdf654 in __dl__start () from target:/system/bin/linker
(gdb) s
Single stepping until exit from function __dl__start,
which has no line number information.
我做错了什么?为什么它保持不变?以及如何生成符号/调试信息?我试图设置“set(CMAKE_BUILD_TYPE Debug)”,但没有生成新文件。
我的CmakeLists.txt
set(PROJECT_NAME Test)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_TOOLCHAIN_FILE android-cmake/android.toolchain.cmake)
set(ANDROID_NDK /home/drem1lin/Android/Sdk/ndk-bundle)
set(ANDROID_NATIVE_API_LEVEL "android-19")
set(ANDROID_TOOLCHAIN_NAME "arm-linux-androideabi-4.9")
set(ANDROID_ABI "armeabi-v7a")
project(${PROJECT_NAME})
cmake_minimum_required(VERSION 3.1)
include_directories(include)
file(GLOB SOURCES source/*.c*)
add_executable(${PROJECT_NAME} ${SOURCES})
foreach (module_src ${MODULES})
get_filename_component(module ${module_src} NAME_WE)
string(TOLOWER ${module} module)
add_library(${module} SHARED ${module_src})
set_target_properties(${module} PROPERTIES PREFIX "")
set_target_properties(${module} PROPERTIES SUFFIX ".m")
target_link_libraries(${module} ${LIBRARY_DEPS})
endforeach(module_src)
最好的问候保罗。
4条答案
按热度按时间fzsnzjdm1#
对于那些使用新NDK工具链(不使用
Android.mk
,但在build.gradle
中添加externalNativeBuild
等部分)的人,以下是步骤:步骤1:按如下方式更改
build.gradle
。**注意:**如果您的ndk在库中使用,请更改 library 的gradle文件,而不是 main application 的gradle文件。
步骤2:构建项目(对我来说是
flutter build apk --debug
,但对于原生Android项目,你知道它)。步骤3:现在你的
.so
与符号在这里:(这是 sample 位置,其中库名称为vision_utils,我的.so文件名为libvision_utils.so)或
Bonus1:如果你想在apk中找到“实际”.so文件,请找到类似
unzip -p ./build/app/outputs/apk/debug/app-debug.apk lib/arm64-v8a/libvision_utils.so > ./build/temp-libvision_utils.so
的文件。如果你使用的是bloaty,你可以像这样运行你的命令:
bloaty ./build/temp-libvision_utils.so --debug-file=./build/vision_utils/intermediates/stripped_native_libs/debug/out/lib/arm64-v8a/libvision_utils.so -d compileunits
laik7k3q2#
我有这个麻烦,因为我知道linux构建系统非常糟糕。带有符号的可执行文件创建在
{project}/obj/local/armeabi/
文件夹中rekjcdws3#
如果你的编译器是gcc或者clang,那么在编译的时候只要传递
-g
选项就可以生成调试符号。lp0sw83n4#
我能够通过以下行向
ndk-build
实用程序添加调试符号:我可以使用
objdump -Wi
和gdb来确认这些符号是否存在。也许用CMake在这些变量上使用set()
会在该构建系统下有所帮助。参考:NOT strip debug symbols ndk-build