У меня есть программа, скомпилированная со стандартным компилятором Android LLVM, работающая на Android. Теперь где-то в моем коде есть досадная ошибка segfault, которую я должен найти.
Мне удалось сгенерировать дампы ядра с помощью
ulimit -c unlimited
Сборка с -gfull
, чтобы получить все отладочные файлы. я могу получить информацию
Andoid.bp
cflags: [
"-Wall",
"-Wextra",
"-Werror",
"-gfull",
"-Wno-sign-compare",
"-Wno-unused-variable",
"-fexceptions",
"-Wno-unused-function",
],
gdb
Это сообщение об ошибке при чтении ядра с помощью gdb $ANDROID_BUILD_TOP/out/target/product/hikey960/system/bin/program -core=core
Reading symbols from ...bin/program...Reading symbols from /home/simson/work4/out/target/product/hikey960/system/bin/program...(no debugging symbols found)...done.
(no debugging symbols found)...done.
символы отладки не найдены заставляет меня поверить, что не было достаточно символов отладки, и чтение дальше
warning: Couldn't find general-purpose registers in core file.
warning: Unexpected size of section `.reg2' in core file.
Core was generated by `program'.
warning: Couldn't find general-purpose registers in core file.
warning: Unexpected size of section `.reg2' in core file.
#0 <unavailable> in ?? ()
(gdb) backtrace
#0 <unavailable> in ?? ()
Backtrace stopped: not enough registers or memory available to unwind further
(gdb)
звучит так, как будто не все, что мне нужнов дампе ядра либо.
lldb
Запуск lldb $ANDROID_BUILD_TOP/out/target/product/hikey960/system/bin/program -core=core
для анализа дампа ядра дает дополнительную информацию, но не намного
(lldb) target create "out/target/product/hikey960/system/bin/program" --core "core"
Core file 'core' (aarch64) was loaded.
(lldb) bt
* thread #1, name = 'program', stop reason = signal SIGSEGV
* frame #0: 0x0000000000000000
frame #1: 0x00000074605388f8
(lldb)
Что еще я могу сделать, чтобы получить дамп ядра, который покажет некоторые подсказки об этом сбое?