2012-03-01 24 views
11

Tôi đang làm việc trên Ứng dụng iPad của mình,Cách in hoặc xem ngăn xếp cuộc gọi phương thức trong xcode?

Trong khi chạy mã, có một phương pháp trong chế độ xem bảng.

như chúng ta biết

`cellForRowAtIndexPath:` 

Có nhiều lần phương pháp này có thể được gọi.

như khi

scrolling table view cells. 

Or table view reload data. 

Tôi có mã hóa phức tạp vì vậy tôi chỉ muốn thấy phương pháp gọi stack ...

Đó từ đó phương pháp được gọi di động cho hàng tại đường index.

Tôi đã sử dụng NSLogs và điểm ngắt nhưng vẫn không thể nhận được.

+3

http://stackoverflow.com/questions/220159/how-do-you-print -out-a-stack-trace-to-the-console-log-in-cocoa – ivanzoid

+0

Điều gì bạn muốn một cách chính xác bạn muốn mỗi lần cellfor hàng tại chỉ mục mỗi lần hoặc không –

+0

Xem điều này: http://stackoverflow.com/questions/8891382/print-callstack-at-runtime-xcode – Nilesh

Trả lời

15

Khi bạn nhấn một breakpoint, chọn navigator gỡ lỗi trong khu vực hàng hải (phía bên trái của cửa sổ):

debug navigator

Các gỡ lỗi navigator cho bạn thấy một dấu vết ngăn xếp cho mỗi thread trong của bạn ứng dụng. Nó cho bạn thấy về cơ bản cùng một thông tin bạn nhận được từ lệnh g2's backtrace, nhưng bỏ qua các địa chỉ trả về (thường không hữu ích). Sử dụng các điều khiển ở dưới cùng của navigator để ẩn hoặc hiển thị tất cả các chủ đề và thay đổi điều chỉnh số lượng khung stack được hiển thị.Tôi đã đặt thanh trượt ở giữa phạm vi của nó trong hình ảnh ở trên và trình điều hướng Debug bỏ qua các khung 2-18, tất cả các cuộc gọi từ phương thức khung này sang phương thức khác, nghĩa là không phải công cụ của tôi.

Xcode 4 nên được thiết lập để hiển thị trình điều hướng gỡ lỗi tự động khi bạn đang gỡ lỗi, nhưng nếu không bạn có thể định cấu hình để thực hiện việc đó bằng cách vào Xcode-> Behaviors-> Edit Behaviors .... Sau đó chọn Chạy mục Tạm dừng từ danh sách và đặt thành Hiển thị navigator Trình gỡ lỗi gỡ lỗi.

+2

+1 cho hình ảnh. (10char) – phlebotinum

+0

Chắc chắn +1 cho hình ảnh. –

+0

Làm cách nào để xem các khung ngăn xếp bị bỏ qua 2-18? Tại sao nó bỏ qua chúng? – jameshfisher

9

Bạn có thể đặt điểm ngắt (hoặc tạm dừng ứng dụng) và từ gdb trình gỡ lỗi ghi "backtrace".

Bạn sẽ thấy stack:

(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' là một phím tắt hữu ích cho' backtrace'. – Caleb

+4

'bt' cũng hoạt động với LLDB :) –

7

Hãy thử đặt một breakpoint tại mục nhập cho

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Sau đó bấm chuột phải vào breakpoint và chọn "Đăng nhập Stack Trace và Auto Tiếp tục" từ mục trình đơn "Break-in Breakpoints".

Thao tác này sẽ tự động ghi nhật ký ngăn xếp mỗi lần chức năng này được nhập và tiếp tục mà không phải thực sự sử dụng bảng điều khiển gdb.

Đó là dành cho Xcode 3.x Đối với Xcode 4, quy trình này hơi khác một chút.

  1. Đặt điểm ngắt của bạn.
  2. Nhấp chuột phải vào điểm ngắt và chọn "Chỉnh sửa Điểm dừng". (Hoặc Command - Option Nhấp vào điểm ngắt)
  3. Chọn "Trình gỡ lỗi" từ cửa sổ bật lên "Hành động".
  4. Đặt thông báo thành "bt" (Không có dấu ngoặc kép.)
  5. Trong "Tùy chọn", hãy nhớ chọn "Tự động tiếp tục sau khi đánh giá".
+0

cảm ơn rất nhiều ... –

+1

+1 cho sự khác biệt của v3 và v4. – phlebotinum

16

Bạn có thể in stack trace trong NSLog bởi

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

EDIT: Mã Swift

println("Stack trace: %@", NSThread.callStackSymbols()) 
Các vấn đề liên quan