Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在xcode中打印或查看方法调用堆栈?_Iphone_Objective C_Xcode_Cocoa Touch - Fatal编程技术网

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

Iphone 如何在xcode中打印或查看方法调用堆栈?,iphone,objective-c,xcode,cocoa-touch,Iphone,Objective C,Xcode,Cocoa Touch,我正在开发我的iPad应用程序 运行代码时,表视图中有一个方法 如我们所知 `cellForRowAtIndexPath:` 可以多次调用此方法 一会儿 scrolling table view cells. Or table view reload data. 我有复杂的编码,所以我只想看看方法调用堆栈 方法从中为索引路径处的行调用单元格 我已经使用了nslog和断点,但仍然无法获取。您可以设置断点(或暂停应用程序),然后从gdb调试器写入“回溯” 您应该看到堆栈: (gdb) ba

我正在开发我的iPad应用程序

运行代码时,表视图中有一个方法

如我们所知

`cellForRowAtIndexPath:`
可以多次调用此方法

一会儿

 scrolling table view cells.

 Or table view reload data.
我有复杂的编码,所以我只想看看方法调用堆栈

方法从中为索引路径处的行调用单元格

我已经使用了
nslog
和断点,但仍然无法获取。

您可以设置断点(或暂停应用程序),然后从gdb调试器写入“
回溯

您应该看到堆栈:

(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

尝试在的条目处设置断点

-(UITableView单元格*)tableView:(UITableView*)tableView单元格for行索引路径:(nsindepath*)indepath

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

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

对于Xcode 3.x,对于Xcode 4,过程有点不同

  • 设置断点
  • 右键单击断点并选择“编辑” 断点”。(或
    命令
    -
    选项
    单击断点)
  • 从“操作”弹出窗口中选择“调试器命令”
  • 将消息设置为“bt”(不带引号)
  • 在“选项”下,确保选中“评估后自动继续”

  • 当遇到断点时,在导航器区域(窗口左侧)中选择调试导航器:

    调试导航器为应用程序中的每个线程显示堆栈跟踪。它向您显示了从gdb的
    backtrace
    命令中获得的基本相同的信息,但省略了返回地址(通常没有多大帮助)。使用导航器底部的控件隐藏或显示所有线程,并更改“调整显示的堆栈帧数”。在上面的图像中,我已经找到了滑块集的范围,并且调试导航器省略了堆栈帧2-18,所有这些调用都是从一个框架方法到另一个框架的调用,即不是我的东西。
    应该将Xcode 4设置为在调试时自动显示调试导航器,如果没有,可以通过转到Xcode->Behaviors->Edit Behaviors….将其配置为显示调试导航器。。。。然后从列表中选择“运行暂停”项目,并将其设置为“显示导航器”Debug navigator您可以通过以下方式在NSLog中打印堆栈跟踪:

    NSLog(@"Stack trace : %@",[NSThread callStackSymbols]);
    
    编辑:Swift代码

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

    如果有人需要的话,只需使用Swift 4语法

    print("Stack trace: \(Thread.callStackSymbols)")
    

    (lldb)线程回溯


    愉快的调试。

    您想要的是正确的,您想要的是每次在索引处为行添加单元格还是不查看此:
    bt
    backtrace
    的有用快捷方式。如何查看省略的堆栈帧2-18?为什么要忽略它们?@jameshfisher它们是隐藏的,因为它们是对框架中的方法/函数的调用,而这些方法/函数不属于代码的一部分,因此可能对查看代码的功能不感兴趣。如果您想查看它们,在调试导航器的最左下角有一个控件--看起来像两个条之间的一个框。单击它可在视图内外切换省略的帧。