如何导航堆栈帧以使用LLDB跟踪xCode中调用的原始行

如何导航堆栈帧以使用LLDB跟踪xCode中调用的原始行,xcode,cocos2d-iphone,lldb,Xcode,Cocos2d Iphone,Lldb,我在游戏中很少出错,我试图确定哪个运行操作与正在进行的操作冲突。我知道我只需要停止以前的操作,但无法确定要运行哪个操作 有没有人能给我一些建议,告诉我如何在回溯中看到前面的内容,或者如何导航到更有用的区域,因为大多数回溯只是抛出错误,我想在抛出错误之前看看发生了什么 下面是我的错误和回溯,以帮助提供一些上下文 注意:说到LLDB,我是个笨蛋 2012-10-01 19:44:27.000 Game Name[19255:907] *** Assertion failure in -[CCActi

我在游戏中很少出错,我试图确定哪个运行操作与正在进行的操作冲突。我知道我只需要停止以前的操作,但无法确定要运行哪个操作

有没有人能给我一些建议,告诉我如何在回溯中看到前面的内容,或者如何导航到更有用的区域,因为大多数回溯只是抛出错误,我想在抛出错误之前看看发生了什么

下面是我的错误和回溯,以帮助提供一些上下文

注意:说到LLDB,我是个笨蛋

2012-10-01 19:44:27.000 Game Name[19255:907] *** Assertion failure in -[CCActionManager addAction:target:paused:], /Users/username/Documents/Development/Sandbox/Game Name/libs/cocos2d/CCActionManager.m:177
2012-10-01 19:44:27.004 Game Name[19255:907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'runAction: Action already running'
*** First throw call stack:
(0x392b83e7 0x354b6963 0x392b829d 0x356647b3 0x2799d 0x497d7 0xb732d 0xede1b 0x3569ce67 0x3928d857 0x3928d503 0x3928c177 0x391ff23d 0x391ff0c9 0x313fb33b 0x39380289 0xaf0a1 0x12ee0)
libc++abi.dylib: terminate called throwing an exception
这是回溯,它显示的距离不够远,或者我只是不知道如何导航到正确的位置

(lldb) thread list
Process 19255 stopped
* thread #1: tid = 0x2403, 0x39bf9350 libsystem_kernel.dylib`__pthread_kill + 8, stop reason = signal SIGABRT
  thread #4: tid = 0x2903, 0x39bf9d98 libsystem_kernel.dylib`__workq_kernreturn + 8
  thread #9: tid = 0x2c03, 0x39bf9d98 libsystem_kernel.dylib`__workq_kernreturn + 8
  thread #7: tid = 0x2d03, 0x39bf96a4 libsystem_kernel.dylib`__semwait_signal + 24
  thread #8: tid = 0x2e03, 0x39be95d0 libsystem_kernel.dylib`kevent64 + 24
  thread #10: tid = 0x2f03, 0x39be8e30 libsystem_kernel.dylib`mach_msg_trap + 20
  thread #11: tid = 0x3003, 0x39be8e30 libsystem_kernel.dylib`mach_msg_trap + 20
  thread #12: tid = 0x3103, 0x39bf9594 libsystem_kernel.dylib`select$DARWIN_EXTSN + 20
  thread #13: tid = 0x3203, 0x39be8e30 libsystem_kernel.dylib`mach_msg_trap + 20
  thread #14: tid = 0x3303, 0x39be8e30 libsystem_kernel.dylib`mach_msg_trap + 20
  thread #15: tid = 0x233f, 0x39bf9d98 libsystem_kernel.dylib`__workq_kernreturn + 8

(lldb) thread backtrace
* thread #1: tid = 0x2403, 0x39bf9350 libsystem_kernel.dylib`__pthread_kill + 8, stop reason = signal SIGABRT
    frame #0: 0x39bf9350 libsystem_kernel.dylib`__pthread_kill + 8
    frame #1: 0x39a4ffb6 libsystem_c.dylib`pthread_kill + 58
    frame #2: 0x39a8c36a libsystem_c.dylib`abort + 94
    frame #3: 0x3504edde libc++abi.dylib`abort_message + 74
    frame #4: 0x3504c098 libc++abi.dylib`default_terminate() + 24
    frame #5: 0x354b6a5a libobjc.A.dylib`_objc_terminate() + 146
    frame #6: 0x3504c11a libc++abi.dylib`safe_handler_caller(void (*)()) + 78
    frame #7: 0x3504c1b4 libc++abi.dylib`std::terminate() + 20
    frame #8: 0x3504d62a libc++abi.dylib`__cxa_rethrow + 94
    frame #9: 0x354b69b4 libobjc.A.dylib`objc_exception_rethrow + 12
    frame #10: 0x391ff2a0 CoreFoundation`CFRunLoopRunSpecific + 456
    frame #11: 0x391ff0c8 CoreFoundation`CFRunLoopRunInMode + 104
    frame #12: 0x313fb33a GraphicsServices`GSEventRunModal + 74
    frame #13: 0x39380288 UIKit`UIApplicationMain + 1120
    frame #14: 0x000af0a0 Game Name`main + 100 at main.m:14
我见过有人谈论“向上移动两个堆栈以到达根项目”,但不知道如何向上移动堆栈

任何帮助、建议或指点都将不胜感激!
提前谢谢

尝试让Xcode在您的程序中放置一个异常断点-您应该能够在抛出异常时捕获该异常。在Xcode中,查看>导航器>显示断点导航器,点击+按钮添加新断点,您可以在“添加异常断点”和“添加符号断点”(后者是main()上的断点或其他任何断点)之间进行选择。

问题

如何导航堆栈帧以使用LLDB跟踪xCode中调用的原始行

解决方案


在Xcode中,在异常中断后,您可以通过键入单词“up”或“down”(无引号),然后键入[enter]键,在堆栈帧上/下导航。调试器将一步一步导航到适当的帧。您可能还希望查看日志导航器以查看调试会话的完整历史记录(⌘ + 8) .

Jason…谢谢你提供的信息。我尝试添加异常断点,但添加后运行时,xCode会立即停止,就好像我在程序的开始处设置了断点一样?这是我的本意吗?这不是我所期望的行为。当添加异常断点时,调试器应该停止,如果程序中的任何代码(或程序使用的库)抛出ObjtoE-C或C++异常。这个断点的好处是,您可以很容易地看到是哪个方法引发了异常,这与之前的堆栈跟踪不同,它只显示终止进程的未捕获异常。如果遇到意外/无趣的异常时遇到断点,只需继续执行即可-假定此异常已被捕获/处理,您对此不感兴趣。