无法在Android上的GDB中显示嵌套命名空间

无法在Android上的GDB中显示嵌套命名空间,gdb,android-source,Gdb,Android Source,我在Android上尝试在gdb中显示嵌套命名空间时遇到问题。我试图研究ART框架(模拟器上libart.so和libandroid_runtime.so中主要包含的符号) 我感兴趣的是调查艺术课。它位于art::mirror::命名空间下 以下是我的设置: 1) Built a Marshmallow version of the AOSP with debug symbols 2) Launched the emulator with my AOSP build 3) Used gdbcli

我在Android上尝试在gdb中显示嵌套命名空间时遇到问题。我试图研究ART框架(模拟器上libart.so和libandroid_runtime.so中主要包含的符号)

我感兴趣的是调查艺术课。它位于art::mirror::命名空间下

以下是我的设置:

1) Built a Marshmallow version of the AOSP with debug symbols
2) Launched the emulator with my AOSP build
3) Used gdbclient to connect to a running process (com.android.musicfx-- arbitrary, but uses the Android runtime)
4) Used set solib-search-path in gdb to the same place my library symbols are.
这将加载libart.so和libandroid_runtime.so(以及许多其他文件)。但是,每当我尝试将一段内存强制转换并打印到“类”类时,它都会失败:

(gdb) p/x *(art::mirror::Class*) 0xbed1af38
No type "mirror" within class or namespace "art".
“镜子”无疑是“艺术”的一部分。它是在艺术运行时的java C翻译的基础:参见和


我哪里做错了?这本书的作者基本上做了同样的事情,而且对他来说似乎很管用。

我发现了一个似乎管用的小技巧。通过将“f4”(在堆栈中跳回4个函数调用)转换为art函数,我可以按预期使用这些函数。仍然不知道为什么我不能在设置断点的地方做。我发现了一个似乎有效的小技巧。通过将“f4”(在堆栈中跳回4个函数调用)转换为art函数,我可以按预期使用这些函数。仍然不知道为什么我不能在设置断点的地方执行。