Xcode全栈跟踪


78

无论如何,在进行调试时都可以看到完整的堆栈跟踪,这是在主线程中调用的方法的列表。或以任何方式在命令窗口上打印它们。



按照编程,您可以使用Mihir描述的callStackSymbols。但是当然,您也可以在Xcode的某个断点处停止(或仅按“暂停”),然后检查左侧栏中的堆栈。(始终启用异常断点。)
2013年

1
(+1表示意识到检查堆栈很重要。开始使用Xcode的人很少赞赏这一点。)
Hot Licks

我在做同样的事情,但是在堆栈跟踪中,我只能看到5或6个方法调用,然后在25个UIApplicationMain和26个main上看到。我看不到6到25之间的方法。我想查看完整的堆栈跟踪。
NaXir 2013年

1
我是通过nslog获得的。谢谢大家
NaXir 2013年

Answers:


81

您可以通过以下方式在NSLog中打印堆栈跟踪:

NSLog(@"Stack trace : %@",[NSThread callStackSymbols]);

发生崩溃时,(lldb)您可以在单词旁边输入:

po [NSThread callStackSymbols]

编辑:

为了在Swift的控制台上获得更好的输出,您可以改用以下代码行:

Thread.callStackSymbols.forEach{print($0)}

11
可以在lldb中打印:po [NSThread callStackSymbols]
Max MacLeod

更新了答案
Mihir Mehta

po Thread.callStackSymbols返回cannot use dot operator on a type
pho_pho

141

使用bt(lldb)中的命令。

暂停后或崩溃后,只需键入bt调试控制台即可。
它将打印完整的堆栈跟踪。

bt命令的样本输出


很棒的技巧,用于在设置符号断点后跟踪约束问题。
Alex Walczak

您还可以提及线程ID(在调试窗格中),以捕获该特定线程的堆栈。例如,在线程42的情况下,您可以-
竞争对手

64

在Xcode 6中,您可以单击窗格左下角的按钮,该按钮显示完整的堆栈跟踪。 Xcode 6显示完整的堆栈跟踪


这个答案在Xcode 11中仍然是最新的,但是按钮已经稍微移动了。;)
不是用户的用户

17

在Xcode 5中,您可以移动显示堆栈跟踪的窗格底部的滑块。它控制显示多少笔触痕。

滑块控制堆栈跟踪


6
您如何在Xcode 6中做到这一点?不再有滑块。
progrmr 2014年

3
该滑块似乎已在XCode6中删除...如果有人知道如何在XCode6下执行此操作,您将是我的英雄。
Steazy 2014年

@Steazy请参见龚鹏军对Xcode 6-11的回答(或可能稍后,目前是11.x)
不是用户的用户

4

您可以breakpoint在引发异常之前添加。首先转到Breakpoint Navigator(cmd + 6)。在鼠标左下角单击加号按钮。或您可以使用Instruments(/ Developer / Applications / Instruments)帮助检测的使用zombie objects参考

当您添加断点查看时,图片将由创建Xcode

在此处输入图片说明

您可以使用底部使用的滑块step over以及over逐行日志来扩展堆栈跟踪。

谢谢,希望对您有帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.