ndk-gdb の使用を手伝ってください!
StackOverflow やその他のインターネットを検索しました =) が、まだ何か問題があります。
構成: MacOSX 64 + 最新の SDK + 最新の NDK + 最新の IDEA + Nexus 7 + 巨大な C++ プロジェクト。
私はすべての一般的な取り決めをしました:
-g -ggdb -O0
へLOCAL_CFLAGS
(これも試しただけ-g
)APP_OPTIM := debug
debuggable=«true»
マニフェストでndk-build NDK_DEBUG=1
gdb.setup および gdbserver ファイルが期待どおりに取得されますが、nm
コマンドを実行すると *.so ファイルに何も出力されません。
プロジェクトのルート フォルダーで実行ndk-gdb
し、GDB を動作させます。たとえば、アプリを一時停止して再開したり、アドレスで ASM コードを取得したりできます。でブレークポイントを設定してもbreak Class::method
、gdb は正しいファイル名と行番号を教えてくれます。
しかしブレークポイントは 99% でヒットしません。バックスタックは常に明らかに間違っています (メソッド名が間違っています)。すべてのシンボリック名とアドレスが間違ってマッピングされているようです。
私は何を逃したのですか?
アップデート。2 つのコマンドinfo sharedlibrary
とC
.
:ndk-gdb
/android-ndk-macosx/build/core/add-application.mk:128: Android NDK: WARNING: APP_PLATFORM android-14 is larger than >android:minSdkVersion 8 in ./AndroidManifest.xml
/android-ndk-macosx/build/core/add-application.mk:128: Android NDK: WARNING: APP_PLATFORM android-14 is larger than >android:minSdkVersion 8 in ./AndroidManifest.xml
/android-ndk-macosx/build/core/add-application.mk:128: Android NDK: WARNING: APP_PLATFORM android-14 is larger than >android:minSdkVersion 8 in ./AndroidManifest.xml
/android-ndk-macosx/build/core/add-application.mk:128: Android NDK: WARNING: APP_PLATFORM android-14 is larger than >android:minSdkVersion 8 in ./AndroidManifest.xml
GNU gdb (GDB) 7.3.1-gg2
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-apple-darwin --target=arm-linux-android".
For bug reporting instructions, please see:
<http://source.android.com/source/report-bugs.html>.
warning: .dynamic section for "/Users/<...>/android/obj/local/armeabi/lib1.so" is not at the expected address (wrong library or version >mismatch?)
warning: Could not load shared library symbols for 73 libraries, e.g. libstdc++.so.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
warning: Breakpoint address adjusted from 0x400aca53 to 0x400aca52.
0x401a7ee4 in epoll_wait () from /Users/<...>/android/obj/local/armeabi/libc.so
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
0x400aa220 0x400b2978 Yes (*) /Users/<...>/android/obj/local/armeabi/linker
0x4019c860 0x401cc184 Yes (*) /Users/<...>/android/obj/local/armeabi/libc.so
No libstdc++.so
No libm.so
<...dozens of system libs with "no"...>
No libjnigraphics.so
0x6749c160 0x67527844 Yes (*) /Users/<...>/android/obj/local/armeabi/lib1.so
0x65c487f8 0x65c6634c Yes (*) /Users/<...>/android/obj/local/armeabi/lib2.so
0x693e62e8 0x699dcd90 Yes /Users/<...>/android/obj/local/armeabi/lib3.so
(*): Shared library is missing debugging information.
(gdb) C
Continuing.>
あなたはそれを見ることができます
- lib3.so (メイン ライブラリ) が最も正しくロードされます (またはロードされない?)
- ブレークポイントアドレスの調整 (どういう意味ですか?)