如何在xcode中打印或查看方法调用堆栈?

问题描述:

我正在使用我的iPad应用程序,如何在xcode中打印或查看方法调用堆栈?

运行代码时,表格视图中有一种方法。

,因为我们知道

`cellForRowAtIndexPath:` 

有几次这种方法可以被调用。

像而

scrolling table view cells. 

Or table view reload data. 

我有复杂的编码,所以我只是想看看方法调用堆栈...

,从该方法在指数路径呼吁行单元格。

我已经使用NSLogs和断点,但仍然无法获得。

+3

http://*.com/questions/220159/how-do-you-print -out-a-stack-trace-to-the-console-log-in-cocoa – ivanzoid 2012-03-01 12:38:22

+0

你想要正确地做什么,你想每次都在cellfor行索引每次或不要 – 2012-03-01 12:38:53

+0

看到这个:http://*.com/questions/8891382/print-call-runtime-xcode – Nilesh 2012-03-01 12:40:29

当你打一个断点,选择导航区中的调试导航器(在窗口的左侧):

debug navigator

调试导航显示你对每个线程堆栈跟踪你应用程序。它显示了您从gdb的backtrace命令获得的基本相同的信息,但省略了返回地址(通常不是非常有用)。使用导航器底部的控件隐藏或显示所有线程,并更改调整显示的堆栈帧数。我已经在上图中的范围中间设置了滑块,并且Debug导航器省略了2-18的堆栈帧,这些帧是从一个框架方法到另一个框架方法的所有调用,即不是我的东西。

Xcode 4应该设置为在您调试时自动显示Debug导航器,但如果不是,您可以通过转到Xcode-> Behaviors-> Edit Behaviors ....来配置它。然后选择从列表中运行暂停项目并将其设置为显示导航器调试导航器

+2

+1图像。 (10char) – phlebotinum 2012-03-01 15:02:30

+0

当然为图像+1。 – 2013-04-24 11:58:03

+0

如何查看省略的堆栈帧2-18?为什么省略它们? – jameshfisher 2015-02-25 18:04:46

您可以设置断点(或暂停应用程序),并从gdb调试器编写“backtrace”。

您应该看到堆栈:

(gdb) backtrace 
#0 0x9022f7fe in mach_msg_trap() 
#1 0x9022ecdc in mach_msg() 
#2 0x022a310a in __CFRunLoopServiceMachPort() 
#3 0x02206550 in __CFRunLoopRun() 
#4 0x02205d84 in CFRunLoopRunSpecific() 
#5 0x02205c9b in CFRunLoopRunInMode() 
#6 0x024617d8 in GSEventRunModal() 
#7 0x0246188a in GSEventRun() 
#8 0x00c0ca16 in UIApplicationMain() 
#9 0x0000270d in main (argc=1, argv=0xbfeff550) at /Users/.........m:14 
+12

'bt'是'backtrace'的一个有用的快捷方式。 – Caleb 2012-03-01 15:00:35

+4

'bt'也适用于LLDB :) – 2013-03-03 16:34:58

尝试在条目

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath设置断点

然后右键点击断点,然后选择“日志堆栈跟踪和自动继续” “内置断点”菜单项。

这将在每次输入此函数时自动记录堆栈跟踪,并继续执行,而不必实际使用gdb控制台。

这是Xcode 3.x对于Xcode 4,程序有点不同。

  1. 设置您的断点。
  2. 右键单击断点并选择“编辑 断点”。 (或Command - Option点击断点)
  3. 从“Action”弹出窗口中选择“Debugger Command”。
  4. 将消息设置为“bt”(不含引号)。
  5. 在“选项”下,确保选中“自动继续评估”。
+0

非常感谢我们会看到它... – 2012-03-01 14:43:43

+1

对于v3和v4的差异+1。 – phlebotinum 2012-03-01 15:03:18

您可以通过

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

编辑打印在NSLog的堆栈跟踪:雨燕代码

println("Stack trace: %@", NSThread.callStackSymbols())