Nhật ký sự cố được tạo bởi Trình mô phỏng iPhone?


95

Có bất kỳ nhật ký sự cố nào được tạo bởi Trình mô phỏng iPhone không?

Trình mô phỏng gặp sự cố rất nhiều nhưng không để lại bất kỳ dấu vết nào trong Bảng điều khiển ... nhật ký sự cố sẽ hữu ích.


2
Tôi không hiểu tại sao bạn cần nhật ký sự cố. Khi ứng dụng trong trình mô phỏng gặp sự cố nhưng trước khi bạn dừng gỡ lỗi, tại dấu nhắc gdb, hãy nhập "bt" cho "backtrace" - bạn sẽ nhận được chính xác những gì sẽ xuất hiện trong nhật ký sự cố. (đã không nhận ra là có vấn đề gọi hồn ở đây, bỏ lỡ năm bưu điện)
Matthew Frederick

3
Nếu sự cố chỉ xảy ra khi bạn không được đính kèm bởi trình gỡ lỗi thì bạn sẽ cần các bản ghi.
Ian1971

bạn đúng. điều này có ý nghĩa!
Raptor

Bạn cũng có thể xem nhật ký gỡ lỗi (bao gồm đầu ra của lệnh lldb) trong "Trình điều hướng báo cáo" trong Xcode (cmd-8). Điều này cũng hữu ích để xem kết quả gỡ lỗi cho các lần chạy trước. Nếu trình gỡ lỗi không được đính kèm, thì điều này rõ ràng sẽ không hoạt động.
Sebastien Martin

2
Nhật ký gỡ lỗi không giống như nhật ký sự cố, mặc dù cả hai nhật ký đều hữu ích để gỡ lỗi sự cố.
Raptor

Câu trả lời:


156

Bảng điều khiển sẽ hiển thị NSLog()đầu ra từ một ứng dụng đang chạy trong trình mô phỏng. Nhật ký sự cố được lưu vào tệp.

Tôi đã tìm thấy một số trong thư mục chính của tôi dưới

~/Library/Logs/DiagnosticReports/

Chúng có phần mở rộng tệp là .crash

Có điều tôi chưa tìm ra là làm thế nào để chúng tạo ra ngay cả khi trình gỡ lỗi lấy được EXC_BAD_ACCESStín hiệu.


Cập nhật

Hiện tại, (OSX 10.11.6), .crash đăng nhập ~/Library/Logs/DiagnosticReports, là khi trình giả lập tự gặp sự cố . Nhật ký ứng dụng bị lỗi (nhưng thiết bị giả lập vẫn chạy tốt), nằm trong:

~ / Thư viện / Nhật ký / CoreSimulator

Mỗi sự cố, có một thư mục con với một id duy nhất. Sắp xếp theo ngày để sự cố gần đây của bạn là thư mục con đầu tiên. Bên trong đó, hãy bắt đầu bằng cách nhìn vào stderr.logsystem.log.

Cũng trực tiếp dưới CoreSimulator, xem CoreSimulator.logSimulator.log.


Bất kỳ ý tưởng nào tại sao các bản ghi này được ghi vào tệp thay vì hiển thị trong bảng điều khiển? Cảm ơn vì thông tin, btw.
aqua

11
Không có báo cáo sự cố nào của tôi trong trình mô phỏng iPhone hoặc iPad hiển thị trong thư mục này, có lẽ câu trả lời này cần được cập nhật?
Justin

3
Có lẽ nó cần một bản cập nhật, nhưng một cuộc bỏ phiếu phản đối không phải là một cách rất lịch sự để khuyến khích nó.
ohhorob

2
Tôi đã tìm thấy báo cáo sự cố trong thư mục được đề cập, nhưng chỉ có một báo cáo và nó không phải là báo cáo gần đây nhất (tức là tôi tiếp tục thử một vài thứ trong ứng dụng và nó vẫn tiếp tục bị lỗi). Tất cả các sự cố đều giống nhau, vì vậy nó không phải là một vấn đề, nhưng tôi đang tự hỏi liệu điều này có thường xảy ra không?
Samik R

10
Cả Justin và ohhorob đều đúng. Bạn cần phải khởi động các ứng dụng trên mô phỏng KHÔNG Xcode và tái tạo sự cố để xem các bản ghi trong~/Library/Logs/DiagnosticReports/
Dave Chambers

20

Tôi khá chắc chắn rằng bạn có thể thấy điều này trong ứng dụng Bảng điều khiển OS X nằm trong Tiện ích. Nếu tôi sai, hãy chắc chắn bỏ phiếu cho tôi, vì vậy tôi xóa nó.


CẬP NHẬT:

Cụ thể (kể từ OSX 10.11.6),

Khi một ứng dụng gặp sự cố trên trình giả lập, một thư mục con (với một id duy nhất) sẽ được thêm vào:

~ / Thư viện / Nhật ký / CoreSimulator

Trong đó, hãy bắt đầu bằng cách kiểm tra stderr.logsystem.log.

Khi chính trình giả lập gặp sự cố, một thư mục con sẽ được thêm vào:

~ / Library / Logs / DiagnosticReports

Đừng nhầm lẫn con đường này với

/ Thư viện / Nhật ký

(thiếu ~khi bắt đầu), có các báo cáo khác nhau về máy Mac của bạn.



dường như nó chỉ áp dụng cho các thiết bị iPhone, thay vì giả lập. Đúng nếu tôi đã sai lầm.
Raptor

7
Có thể mở Bảng điều khiển từ trình mô phỏng bằng cách nhấn Cmd- / hoặc sử dụng tùy chọn menu Gỡ lỗi / Mở Nhật ký Hệ thống ...
lambmj

5

Đây là thứ phù hợp với tôi trong một trường hợp đặc biệt ... Ứng dụng của tôi đã gặp sự cố với SIGKILL khi nó kết thúc. Tôi sẽ thấy ngoại lệ trong main.m trong vài giây và sau đó ứng dụng sẽ hoàn tất việc kết thúc - do đó, không có cơ hội để lấy lại dấu vết.

Tôi đã tìm kiếm rất nhiều về "nơi mà trình mô phỏng lưu trữ nhật ký sự cố của nó" và không bao giờ tìm được câu trả lời. Tuy nhiên, thủ thuật sau khá hữu ích và tôi có thể lấy nhật ký sự cố ngay lập tức:

Về cơ bản, hãy mở /Application/Utilities/CrashReporterPrefs.app và thay đổi cài đặt thành “Developer”. Điều này sẽ khiến CrashReporter hiển thị cửa sổ bật lên với nhật ký sự cố sau khi ứng dụng của bạn gặp sự cố.

Tôi tìm thấy điều này trong phần “Xem bảng điều khiển trình mô phỏng iOS và nhật ký sự cố” trong tài liệu này của Apple: http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/ios_development_workflow/125-Using_iOS_Simulator/ios_simulator_application. html


Nhân tiện, vấn đề ban đầu với SIGKILL mà tôi đang nghiên cứu hóa ra không phải là vấn đề: stackoverflow.com/questions/7901262/…
dana_a

Tôi nên chỉ ra rằng không có ứng dụng CrashReporterPrefs nào trong Ứng dụng / Tiện ích, tuy nhiên tôi đã tìm kiếm nó và có thể tìm thấy ứng dụng ở nơi khác.
Justin

@Justin bạn tìm thấy nó ở đâu?
Ohad Schneider

1
Lưu ý rằng công cụ được đề cập ở trên có thể tải xuống từ Xcode trong một gói có tên "Công cụ bổ sung cho Xcode" developer.apple.com/download/more/…
markhiz 14/09/18

1

Điều này đáng tin cậy hơn nhiều. Chỉ trong vài bước, tôi đã có thể tìm thấy số dòng nguồn và tên phương pháp:

  1. cd đến dir có tệp .app & .dSYM
  2. chạy /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gdb/gdb-arm-apple-darwin MyApp.app/MyApp
  3. đặt in asm-demangle trên
  4. đặt tên tệp-biểu tượng in trên
  5. p / a 0 × 00015c64 -> địa chỉ nhận được bằng cách mở nhật ký sự cố trong ứng dụng “Console” hoặc chỉ cần nhấp đúp vào tệp .crash.

3
Tôi không hiểu tại sao bạn cần nhật ký sự cố. Khi ứng dụng trong trình mô phỏng gặp sự cố nhưng trước khi bạn dừng gỡ lỗi, tại dấu nhắc gdb, hãy nhập "bt" cho "backtrace" - bạn sẽ nhận được chính xác những gì sẽ xuất hiện trong nhật ký sự cố.
Matthew Frederick

Phương pháp này hoạt động tốt cho các bản ghi sự cố từ điện thoại khách.
Gamma-Point

1

Nhật ký sự cố crash sẽ xuất hiện trong ~ / Library / Logs / CrashReporter.

  • Nếu chương trình giả lập iPhone bị treo (không phải ứng dụng iPhone chạy trong trình mô phỏng), thì sẽ có một mục cho iPhoneSimulator.
  • Nếu Ứng dụng iPhone trong trình mô phỏng gặp sự cố, nhật ký sự cố sẽ xuất hiện với tên hiển thị của ứng dụng.

Khi Xcode nhận được nhật ký sự cố từ một thiết bị được kết nối, nó sẽ lưu trữ chúng trong các thư mục con của ~ / Library / Logs / CrashReporter / MobileDevice


Đã hơn một năm sau nhưng tôi thấy "ứng dụng trong trình mô phỏng" bị lỗi tại ~ / Library / Logs / DiagnosticReports ... và có vẻ như: MobileSafari_2013-03-21-155844_My-MacBook-Pro.crash
Rob

0

Đối với tôi, đó là một biểu thức mà tôi đã thêm vào cửa sổ theo dõi trình gỡ lỗi. Khi một điểm ngắt bị tấn công, biểu thức xấu đang khiến XCode trở nên mặc định.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.