我在iPad App上工作,
在运行代码时,表视图中有一个方法。
我们知道
`cellForRowAtIndexPath:`
有几次可以调用此方法。
喜欢而
scrolling table view cells.
Or table view reload data.
我有复杂的编码所以我只想看方法调用堆栈......
从哪个方法调用索引路径的行的单元格。
我使用了NSLogs
和断点,但仍然无法获得。
答案 0 :(得分:21)
您可以通过
打印NSLog中的堆栈跟踪NSLog(@"Stack trace : %@",[NSThread callStackSymbols]);
编辑:Swift代码
println("Stack trace: %@", NSThread.callStackSymbols())
答案 1 :(得分:20)
当您点击断点时,在导航器区域(窗口左侧)中选择Debug导航器:
Debug导航器显示应用程序中每个线程的堆栈跟踪。它显示了与gdb的backtrace
命令基本相同的信息,但省略了返回地址(通常不是很有帮助)。使用导航器底部的控件隐藏或显示所有线程,并更改调整显示的堆栈帧数。我在上图中将滑块设置在其范围的中间位置,并且Debug导航器省略了堆栈帧2-18,这是从一种框架方法到另一种框架方法的所有调用,即不是我的东西。
Xcode 4应设置为在您调试时自动显示Debug导航器,但如果没有,您可以通过转到Xcode-> Behaviors-> Edit Behaviors ....来配置它。然后选择列表中的“运行暂停”项目并将其设置为显示导航器调试导航器。
答案 2 :(得分:11)
您可以设置断点(或暂停应用),也可以从 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
答案 3 :(得分:7)
尝试在
条目设置断点 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
然后右键单击断点并从“Built-in Breakpoints”菜单项中选择“Log Stack Trace and Auto Continue”。
每次输入此功能时,这将自动记录堆栈跟踪,并且无需步骤实际使用gdb控制台即可继续。
那是Xcode 3.x对于Xcode 4,程序有点不同。
Command
- Option
点击断点)答案 4 :(得分:2)
bt
,将当前线程的堆栈跟踪(回溯)打印到控制台。该信息包括线程号,框架等。看起来像
* thread #1: tid = 0x3cccc1, 0x00003076 MyStuff`-[BNRMasterViewController viewDidLoad](self=0x08988fa0, _cmd=0x009bad27) + 102 at BNRMasterViewController.m:35, queue = 'com.apple.main-thread, stop reason = breakpoint 1.1
frame #0: 0x00003076 MyStuff`-[BNRMasterViewController viewDidLoad](self=0x08988fa0, _cmd=0x009bad27) + 102 at BNRMasterViewController.m:35
frame #1: 0x003409a8 UIKit`-[UIViewController loadViewIfRequired] + 696
frame #2: 0x00340c44 UIKit`-[UIViewController view] + 35
frame #3: 0x0036b339 UIKit`-[UINavigationController rotatingSnapshotViewForWindow:] + 52
frame #4: 0x00694910 UIKit`-[UIClientRotationContext initWithClient:toOrientation:duration:andWindow:] + 420
frame #5: 0x00270ea2 UIKit`-[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:isRotating:] + 1495
frame #6: 0x002708c6 UIKit`-[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:] + 82
frame #7: 0x00270798 UIKit`-[UIWindow _setRotatableViewOrientation:updateStatusBar:duration:force:] + 117
frame #8: 0x00270820 UIKit`-[UIWindow _setRotatableViewOrientation:duration:force:] + 67
frame #9: 0x0026f8ba UIKit`__57-[UIWindow _updateToInterfaceOrientation:duration:force:]_block_invoke + 120
...
如果要调试应用程序的多线程部分,则可以使用命令:bt all
在遇到断点时显示每个线程的堆栈跟踪。
您还可以通过在命令bt 10
中添加数字来打印出有限数量的堆栈帧。
或
po Thread.callStackSymbols
了解更多here
答案 5 :(得分:1)
(lldb)线程回溯
调试愉快。
答案 6 :(得分:0)
只要有人需要,就使用Swift 4语法
print("Stack trace: \(Thread.callStackSymbols)")