2009-05-21 30 views
5

Tôi đang viết một ứng dụng iPhone có thể được bắt đầu qua URL tùy chỉnh. Vì vậy, tôi ghi đè - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)urlLàm cách nào để gỡ lỗi khi triển khai thông báo handleOpenURL?

Để kiểm tra các thay đổi của mình, tôi phải chạy ứng dụng trong trình mô phỏng, sau đó thoát ra và khởi chạy Safari. Sau đó, tôi nhập URL tùy chỉnh của mình vào thanh địa chỉ để khởi chạy ứng dụng.

Nhưng mỗi khi tôi khởi chạy, ứng dụng gặp sự cố. Tôi đang cố gắng tìm ra lý do tại sao, nhưng khi tôi thiết lập một điểm dừng và khởi động ứng dụng từ màn hình chủ (thay vì trong XCode) nó dường như không đính kèm.

Tôi thậm chí đã thử đặt các câu lệnh NSLog vào thông điệp handleOpenURL, nhưng chúng không được in ra bàn điều khiển.

Tôi cho rằng tôi có thể tạo UIAlertView nhưng ... yeah, yikes. Bất kỳ cách nào khác để kết nối với một phiên gỡ lỗi trong Trình mô phỏng?

Trả lời

14

Trong Xcode 4, bạn có thể chỉnh sửa chương trình của mục tiêu của bạn và trong "Run", "Thông tin" tab , bạn có thể chọn "chờ cho MyApp.app để khởi động" tùy chọn:

enter image description here

này sẽ làm cho trình gỡ lỗi để chờ cho đến khi thời gian tiếp theo bắt đầu ứng dụng của bạn, và sau đó gắn vào quá trình chứ không phải là tạo ra một quy trình mới cho bạn. Điều này sẽ cho phép bạn khởi chạy ứng dụng của mình theo cách thủ công từ Safari và sử dụng trình gỡ rối.

+0

Đây sẽ là câu trả lời mới ngay bây giờ mà Apple đã sửa lỗi này trong Xcode 4. Dễ dàng hơn nhiều! – ageektrapped

+1

Điều này không móc trình gỡ lỗi, nhưng NSLog và stdout dường như bị mất: ( –

7

Mở Console.app (trong thư mục Tiện ích). Thông điệp tường trình của bạn sẽ xuất hiện ở đó.

+0

Để mở rộng khi điều này, các câu lệnh 'NSLog' sẽ không hiển thị trong bảng điều khiển XCode chuẩn nếu ứng dụng không được khởi chạy từ XCode (tức là trên điện thoại hoặc trong trình mô phỏng). –

+0

Điều này không hiệu quả đối với tôi, nhưng bằng cách sử dụng tab Console trong cửa sổ XCode Organizer ... –

1

Bạn có thể viết Bài kiểm tra đơn vị thực hiện chức năng của AppDelegate của bạn không?

+0

Tôi thực sự đã thử một cách khác tương tự - tôi đặt một cuộc gọi đến handleOpenURL trong thông báo khởi chạy applicationDidFinish, và sau đó khởi chạy như bình thường và tôi đã có thể bước qua. Và làm theo cách đó đã không làm hỏng bất cứ điều gì, nó chỉ đâm qua các bước được mô tả ở trên. – bpapa

+0

Trình xử lý handleOpenURL của bạn có phụ thuộc vào thứ gì đó được thiết lập trong applicationDidFinishLaunching không? –

+0

Ngoài ra, thay vì cố đăng nhập vào bảng điều khiển, bạn có thể lưu một số thông tin vào một tệp không? –

1

Tôi đã không cố gắng này nhưng làm thế nào về việc thêm một inline hướng dẫn breakpoint trong mã của bạn:

#if TARGET_CPU_ARM == 1 
#define breakpoint() __asm__ volatile ("bkpt 0") 
#else // !ARM - assume INTEL. Everything else will break 
#define breakpoint() __asm__ volatile ("int3"); 
#endif 
1

thêm dòng sau như dòng đầu tiên trong hadleOpenURL:

[NSThread sleepForTimeInterval: 30.0] và đặt breakpoint trên dòng tiếp theo sau đó.

Sau khi ứng dụng của bạn được gọi, bạn sẽ có 30 giây để đi tới XCode và chọn từ menu: Run/"Attach to Process" và chọn tên ứng dụng của bạn từ danh sách. Bạn trình gỡ lỗi nên dừng lại ở điểm ngắt của bạn.

Đừng quên xóa sleepForTimeInterval khi bạn hoàn tất!

Các vấn đề liên quan