我在Android Studio 1.5中进行原生调试。问题是lldb查看错误的帧(最底部),因此没有显示正确的寄存器值。
select frame
似乎没有任何效果:
(lldb)bt *线程#1:tid = 30637,0x400e429e libc.so
strncpy, name = 'WHATEVER', stop reason = breakpoint 2.1 frame #0: 0x400e429e libc.so
strncpy *帧#1:0x406ba1b0 libicuuc.so (lldb)帧信息 帧#1:0x406ba1b0 libicuuc.so(lldb) frame select 0 frame #0: 0x400e429e libc.so`strncpy libc.so`strncpy: -> 0x400e429e <+0>: push {r4, lr} 0x400e42a0 <+2>: cbz r2, 0x400e42c4 ; <+38> 0x400e42a2 <+4>: subs r1, #0x1 0x400e42a4 <+6>: mov r3, r0 (lldb) frame info frame #1: 0x406ba1b0 libicuuc.so (lldb) register read General Purpose Registers: r4 = 0x40773ed4 r5 = 0x407762a8 r6 = 0x00000000 r7 = 0x40745eb0 r8 = 0xbe9f2d30 r9 = 0xbe9f2b20 r10 = 0x400f8384 libc.so`__stack_chk_guard r11 = 0x77205d00 sp = 0xbe9f2d30 lr = 0x406ba1b1 pc = 0x75cdbd38 cpsr = 0x200b0030 5 registers were unavailable.
有任何想法/建议吗?
答案 0 :(得分:1)
听起来Android Studio正在重置每个命令后的帧 - 可能是为了使它与UI显示的内容保持同步。您选择了第0帧,但是您的帧信息命令(应显示第0帧的信息)显示第1帧。
如果您在Android Studio用户界面中选择某个框架,然后在控制台中执行com_tags
,它是否会显示您在用户界面中选择的框架?如果有效,那么frame info
也应报告正确的帧寄存器,因此您现在可以将其用作解决方法。
如果Android Studio有错误报告者,您可能会提出有关此问题的错误。 lldb支持保持UI和命令行同步,但UI必须采用它。