2009-12-08 8 views
78

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

Trình mô phỏng bị lỗi 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 ngừng gỡ lỗi, tại loại lời nhắc gdb "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 có câu hỏi necromancy ở đây, bỏ lỡ năm đăng bài) –

+2

Nếu vụ tai nạn 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

+0

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

Trả lời

126

Bảng điều khiển sẽ hiển thị đầu ra NSLog() từ một ứng dụng đang chạy trong trình mô phỏng. Bản ghi 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/ 

Họ có một phần mở rộng tập tin của .crash

Something Tôi vẫn chưa tìm ra là làm thế nào để có được chúng để tạo ra ngay cả khi debugger lấy tín hiệu EXC_BAD_ACCESS.


Cập nhật

Hiện nay, (OSX 10.11.6), các bản ghi .crash trong ~/Library/Logs/DiagnosticReports, là khi emulator tự treo. Logs cho một ứng dụng đâm (nhưng thiết bị giả lập vẫn chạy tốt), đang ở:

~/Library/Logs/CoreSimulator

mỗi vụ tai nạn, có một thư mục con với một id duy nhất.Sắp xếp theo ngày, do đó 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 xem stderr.logsystem.log.

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

+0

Bingo! bạn đã cứu cuộc đời tôi! – Raptor

+0

Bất kỳ ý tưởng nào tại sao các nhật ký này được ghi vào tệp thay vì hiển thị trong bảng điều khiển? Cảm ơn 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ó thể câu trả lời này cần được cập nhật? – Justin

12

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


UPDATE:

Cụ thể (như của OSX 10.11.6),

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

~/Library/Logs/CoreSimulator

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

Khi giả lập tự tai nạn, 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

/Library/Logs

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

+0

Đúng. Thông tin thêm tại đây http://developer.apple.com/iphone/library/documentation/Xcode/Conceptual/iphone_development/130-Debugging_Applications/debugging_applications.html –

+0

dường như 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

Bàn điều khiển có thể được mở từ trình mô phỏng bằng cách nhấn Cmd-/hoặc sử dụng tùy chọn trình đơn Debug/Open System Log .... – lambmj

1

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

  1. cd vào thư mục có file .app & .dSYM
  2. chạy /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gdb/gdb-tay-apple-darwin MyApp.app/MyApp
  3. bộ in asm-demangle trên
  4. bộ in biểu tượng-filename 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 ngừng gỡ lỗi, tại loại lời nhắc gdb "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ố. –

+0

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

3

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

Tôi đã thực hiện rất nhiều tìm kiếm về “trình mô phỏng lưu trữ nhật ký sự cố ở đâu” và không bao giờ tìm được câu trả lời. Tuy nhiên, mẹo sau đây khá tiện lợi và tôi có thể lấy nhật ký sự cố khi đang di chuyển:

Về cơ bản, mở /Applications/Utilities/CrashReporterPrefs.app và thay đổi cài đặt thành "Nhà phát triển". Đ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 thấy điều này trong “Xem iOS Simulator Console và sụp đổ Logs” trong doc này từ Apple: http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/ios_development_workflow/125-Using_iOS_Simulator/ios_simulator_application.html

+0

Nhân tiện, vấn đề ban đầu với SIGKILL mà tôi đã nghiên cứu hóa ra không phải là vấn đề: http://stackoverflow.com/questions/7901262/xcode-debugger-stops-with-sigkill-on-stop-button –

+0

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

+0

@Justin bạn đã tìm thấy ở đâu? –

1

Vụ tai nạn logs sụp đổ sẽ xuất hiện dưới ~/Library/Logs/CrashReporter.

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

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

+0

Đây là hơn một năm sau đó nhưng tôi thấy "ứng dụng trong mô phỏng" treo 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 hiện mà tôi đã thêm vào cửa sổ xem trình gỡ rối. Khi một breakpoint bị tấn công, biểu thức xấu đã khiến cho XCode bị segfault.