2017-09-22 18 views
19

Xcode 8 hoặc 9 bắt đầu hiển thị các sự cố thời gian chạy. Bạn thấy biểu tượng màu tía ở đầu cửa sổ và danh sách trong Bộ điều hướng phát hành, bên cạnh các vấn đề về thời gian xây dựng như cảnh báo biên dịch và lỗi.Cách đăng nhập cảnh báo hiển thị dưới dạng sự cố thời gian chạy trong Xcode?

enter image description here

enter image description here

Những vấn đề thời gian chạy Tôi đã nhìn thấy được tạo ra bởi các thư viện hệ thống. Có cách nào để mã ứng dụng của riêng tôi tạo ra chúng không?

+0

Tôi nghĩ bạn không thể làm được ... –

+4

Bắt chính xác những gì bạn đang yêu cầu là không thể, nhưng nếu bạn xây dựng trên mục tiêu bạn đang cố gắng đạt được hoặc vấn đề bạn đang cố gắng giải quyết, chúng tôi có thể cung cấp giải pháp thay thế. –

Trả lời

1

Có! Bạn sẽ thấy những điều này nếu bạn làm một cái gì đó mà một chất khử trùng bắt, như thực hiện một số hoạt động giao diện người dùng nhất định một luồng nền với Thread Sanitizer được kích hoạt. Có bố cục không rõ ràng và tạm dừng trong trình gỡ lỗi chế độ xem cũng là cách để điều này xảy ra. Dù bằng cách nào, nhìn thấy điều này xảy ra trong các thư viện của Apple không phải là một điều tốt ...

+6

Tôi nghĩ, điểm của câu hỏi là khả năng tạo ra các vấn đề thời gian chạy tùy chỉnh "bằng tay", theo ý muốn. – FreeNickname

+0

Bạn có thể tạo các tùy chọn này theo ý muốn không? Có, nếu bạn làm bất cứ điều gì được liệt kê ở trên. Bạn có thể làm điều đó như một loại thiết bị ghi hoặc gỡ lỗi? Không thật sự lắm. Đó không phải là những gì nó được cho là được sử dụng cho. –

+0

Vâng, theo ý tôi, nó thực sự là loại được sử dụng cho :) Không dành cho việc ghi nhật ký chung, nhưng để giải quyết nhanh các vấn đề thời gian chạy, với khả năng xem siêu dữ liệu bổ sung và nhảy nhanh đến vị trí trong mã gây ra nó. Nó sẽ khá tuyệt vời. Và dựa trên sự quan tâm đến câu hỏi này, có vẻ như khá nhiều người đồng ý. Nhưng có, rất có thể là không thể. Sẽ rất tuyệt nếu ai đó xuất hiện và nói với chúng tôi rằng nó thực sự là mặc dù. – FreeNickname

1

CocoaLumberjack khuôn khổ có thể được sử dụng để chụp Run lần console log cũng như các bản ghi Bối cảnh wakeup App.

https://github.com/CocoaLumberjack/CocoaLumberjack

https://github.com/phonegap/phonegap-plugin-push/issues/1988

Bằng cách này bạn có thể chụp các cảnh báo màu tím hiển thị trong Xcode9 như dưới đây trong một tập tin được duy trì bên trong App container: -

========= ================================================== ======

Chủ đề chính Checker: UI API được gọi trên một chủ đề nền: - [UIApplication registerUserNotificationSettings:] PID: 2 897, TID: 1.262.426, tên Chủ đề: (không có), Queue tên: com.apple.root.default-QoS, QoS: 21

1

Xem here
Một khi bạn đã triển khai ứng dụng của bạn, hoặc thông qua App Store hoặc như một Ad Hoc hoặc Enterprise build, bạn sẽ không thể đính kèm trình gỡ rối của Xcode vào nó. Để gỡ lỗi các vấn đề, bạn cần phải phân tích các bản ghi lỗi và đầu ra Console từ thiết bị.

Bản ghi sự cố Apple Watch sẽ khả dụng trên thiết bị được ghép nối và cũng có thể thu được bằng các phương pháp được mô tả bên dưới.

Để biết thêm thông tin về văn bản giàu NSLog báo cáo, xem Improved logging in Objective-C.

Paste dưới đây ví dụ mã vào dự án của bạn:

NSMutableArray *someObject = [NSMutableArray array]; 
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject); 
[someObject addObject:@"foo"]; 
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject); 
1

Nó phụ thuộc vào bạn nếu bạn đang làm bất kỳ liên quan thứ UI trên thread sau đó chính khác vì vậy hệ thống sẽ tạo ra cho bạn nếu không bạn không thể tự tạo ra nó.

Tất cả thao tác giao diện người dùng phải được thực hiện trong Đề tài chính.

Nếu bạn không làm như vậy, trong XCode 9 có tính năng được gọi là Bộ kiểm tra chủ đề chính.

Mọi chi tiết, bạn có thể truy cập dưới đây url: https://developer.apple.com/documentation/code_diagnostics/main_thread_checker

Nó là cơ bản sử dụng để kiểm tra xem có bất kỳ thứ liên quan UIKit đang xảy ra trên một chủ đề chính hay không, Nếu không làm như vậy, nó sẽ tạo ra vấn đề? trong thời gian chạy. Vì vậy, quấn mã của bạn trong khối chính Thread như dưới đây để tránh ổn định và cảnh báo thời gian chạy.

Bạn có thể Enable - Disable sử dụng này bước Sửa Đề án ... -> (Chọn chương trình của bạn) -> Chẩn đoán -> Disable 'chủ đề chính kiểm tra'

1

Trong XCode 8.3 và trước đó bạn có thể sử dụng thiết lập breakpoint vào bất kỳ phương thức nào của lớp UIKit như setNeedsDisplay() như dưới đây.

Cũng có thư viện ở mục tiêu-c steipete lớp trong đó #import <objc/runtime.h> được sử dụng.

enter image description here

Nhưng trong Xcode 9 bên dưới thư viện Xcode.app/Contenets/Developer/usr/lib/libMainThreadChecker.dylib có sẵn, nào xử lý đối với bất kỳ vấn đề liên quan có khả năng thực hiện out-of-chính chủ đề khi chạy.

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