ios应用程序崩溃没有错误(即使通过按钮点击调用空操作)

Mur*_*lim 2 crash error-handling ios

我发现了类似的问题,但没有一个解决了我的问题.

有一些viewcontrollers和工作应用程序.

我向其中一个viewcontrollers添加了一个按钮,并绑定了一个"sampleclick"动作.此操作中没有任何内容(没有代码,没有行,只是一个空方法),应用程序与以下块崩溃:

所有输出日志:

(lldb)
Run Code Online (Sandbox Code Playgroud)

和堆栈:

libobjc.A.dylib`objc_msgSend:
0x10ed08c:  movl   8(%esp), %ecx
0x10ed090:  movl   4(%esp), %eax
0x10ed094:  testl  %eax, %eax
0x10ed096:  je     0x10ed0e8                 ; objc_msgSend + 92
0x10ed098:  movl   (%eax), %edx
0x10ed09a:  pushl  %edi
0x10ed09b:  movl   8(%edx), %edi
0x10ed09e:  pushl  %esi
***0x10ed09f:  movl   (%edi), %esi   >>> crashes here with :Thread1:EXC_BAD_ACCESS*** (code=1,address: .....)
0x10ed0a1:  movl   %ecx, %edx
0x10ed0a3:  shrl   $2, %edx
0x10ed0a6:  andl   %esi, %edx
0x10ed0a8:  movl   8(%edi,%edx,4), %eax
0x10ed0ac:  testl  %eax, %eax
0x10ed0ae:  je     0x10ed0b9                 ; objc_msgSend + 45
0x10ed0b0:  cmpl   (%eax), %ecx
0x10ed0b2:  je     0x10ed0d0                 ; objc_msgSend + 68
0x10ed0b4:  addl   $1, %edx
0x10ed0b7:  jmp    0x10ed0a6                 ; objc_msgSend + 26
0x10ed0b9:  popl   %esi
0x10ed0ba:  popl   %edi
0x10ed0bb:  movl   4(%esp), %edx
0x10ed0bf:  movl   (%edx), %eax
0x10ed0c1:  jmp    0x10ed0d9                 ; objc_msgSend + 77
0x10ed0c3:  nopw   %cs:(%eax,%eax)
Run Code Online (Sandbox Code Playgroud)

Jea*_*ean 5

您的问题的一个可能答案是您正在尝试将消息发送到对象的已释放实例.

尝试寻找zoombies(按R,选择Diagnostics选项卡并激活Enable Zombie Objects).每个发布的对象都将成为NSZombie的一个实例,如果您尝试访问它们而不是崩溃,它会将消息记录到控制台.

此外,在ARM体系结构(涉及iOS)上,r0应指向消息的接收者.你可以尝试调查一下.它可能会产生有用的信息.(p/x $r0在调试器上使用命令.如果执行x/s $r1,则应获取选择器名称.)

注意:
如果您要调试当时发生的崩溃objc_msgSend(),我强烈建议您查看[objc explain]:所以您在 Hamster Emporium存档上的objc_msgSend()中崩溃了.它包含有用的提示和技巧,可以从调试器中获取大部分信息,并调查崩溃发生的原因.

编辑:从评论,但没有代码,只能猜测是某处在你的代码(有可能的对象detailviewcontroller)注册事件,但已经太早释放.因此发送动作时崩溃.这只是一个提示,但恕我直言,值得在调试器中进行调查.