Lldb的n和ni命令没有单步的疑问


#1

n和ni应该是指单步调试。
但为什么执行n或ni后,并没有执行到下一条指令。也没有执行到bl 后面的地址。

比如最上面的红框中,当前指向 0x18ab0c934,执行n之后应该指向 0x18ab0c938,但结果到了0x1929b8fd8。

系统iOS9.0.2 Xcode7.2。


#2

因为b是branch,即分支/跳转的意思,下一条指令是跳转到那个地方的指令,不一定是紧挨着的下一条指令


#3

哦这样,ni是下一条汇编指令。
我混淆成c++中的单步执行了。


#4

你好,我也遇到这个疑问了,看了上面的解释还是不太懂。请问 n 或者 ni 之后,为什么不是到地址 0x8ab0c938 呢?谢谢你啦


#5

欸。。。我看了下 也有同样的疑问呢。。。


#6

比如说刚好这个指令下面有分支,肯定就到别的地方了


#7

这情况我大概知道,我这边调试的 一般是会到父函数去,有点相当于返回到 LR 所在地址了,不知道怎么理解


#8

can't understand too


#10

我还遇过一种情况,xcode8.1后版本的lldb只要遇到带b跳转函数的 指令,执行ni,n,si,s都是进入子函数内,而xcode8.0之前的lldb执行ni是没有进入子函数的,所以我现在一直在用xcode8.0版的lldb


#11

还真是,试用 xcode8.0 n步入 ni 步过 正常了。


#12

lldb版本问题吧,不知道改了啥了,懒得找原因了,就在用xcode8.0的lldb


#13

请教下 现在的机器是xcode9 lldb版本也是跟他走的; 有啥办法并存安装xcode8 的lldb?

只需要lldb就行。


#14

你可以自己编译一份lldb,或者在https://developer.apple.com/download/more/ 下载旧版本的xcode8,改个名字例如XCode8放到应用就好了


#15

试验了多个 xcode8版本,和不同的app , 仍旧出现 步入步过 只有步入 和 调试的时候 n 命令会乱飞到一个不知道什么的地方。。。