gpt4 book ai didi

android - 如何为 android native 应用程序生成调试符号?

转载 作者:行者123 更新时间:2023-12-01 14:55:25 25 4
gpt4 key购买 nike

我在为 Native Android 开发中做了第一步,需要一些帮助。我将 armv7 gdbserver 复制到我的手机并编译用 C++ 编写的“hello word”测试应用程序。现在我想用 android ndk 包中的 gdb 调试我的应用程序。

我启动 gdb 并通过目标远程命令连接到手机并获取此消息,并且在“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)

向保罗致以最诚挚的问候。

最佳答案

对于那些使用新的 NDK 工具链(不使用 Android.mk 而是在 externalNativeBuild 中添加类似 build.gradle 的部分)的用户,步骤如下:
Step1:更改build.gradle如下。
注意:如果您的 ndk 在库中使用,则更改库的 gradle 文件而不是主应用程序的。

android {
defaultConfig {
packagingOptions {
doNotStrip '**.so' // ADD THIS! #1
}
externalNativeBuild {
cmake {
cppFlags "-Wl,--build-id -g" // ADD THIS! #2
}
}
}
}
步骤2:构建项目(对我来说是 flutter build apk --debug,但对于原生 Android 项目,你知道它)。
第三步:现在你的 .so带符号在这里:(这是示例位置,其中库名称是 vision_utils,我的 .so 文件名是 libvision_utils.so)
./build/vision_utils/intermediates/cmake/debug/obj/arm64-v8a/libvision_utils.so
或者
./build/vision_utils/intermediates/stripped_native_libs/debug/out/lib/arm64-v8a/libvision_utils.so
奖励 1:如果您想要 apk 中的“实际”.so 文件,请找到它,如 unzip -p ./build/app/outputs/apk/debug/app-debug.apk lib/arm64-v8a/libvision_utils.so > ./build/temp-libvision_utils.so .
奖励 2:如果您使用 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

关于android - 如何为 android native 应用程序生成调试符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41812638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com