Làm thế nào để gỡ lỗi các tiện ích mở rộng iOS 8 với NSLog?


90
- (void)viewDidLoad
{
    NSLog(@"%s", __func__);
    // ...
}

trong viewDidLoadmột tiện ích mở rộng iOS 8 . những NSLoggì kết quả đầu ra trong Xcode. NSLoghoạt động như bình thường trong ứng dụng vùng chứa.

Làm cách nào để lấy kết quả từ thông báo gỡ lỗi từ tiện ích mở rộng?


Tôi cũng gặp phải vấn đề này. Có lẽ NSLog chỉ bị hỏng. Tôi sử dụng Breakpoints để gỡ lỗi các giá trị vào lúc này. Nhưng họ cũng thực sự có lỗi.
gallileo

Tôi gặp sự cố tương tự trong đó trình gỡ lỗi không bao giờ chốt và luôn nói "đang chờ đính kèm" trong Xcode. Rất tiếc, tôi không thấy googling có ích gì và đã đăng câu hỏi ở đây trên Stack mà chưa có câu trả lời.
Alex Bollbach

Câu trả lời:


95
  1. Gỡ lỗi hoạt động cho tiện ích mở rộng ứng dụng.
  2. Nó cũng hoạt động trên giả lập.
  3. Nếu phần mở rộng ứng dụng của bạn gặp sự cố trong trình mô phỏng, bạn có thể thấy không dễ dàng để khởi động lại phần mở rộng ứng dụng của mình. Khởi động lại trình mô phỏng của bạn là một giải pháp nhanh chóng.
  4. Các bước để gỡ lỗi tiện ích mở rộng ứng dụng:

    1. Chạy ứng dụng vùng chứa. Trong bước này, Xcode tải ứng dụng vùng chứa và tiện ích ứng dụng lên thiết bị hoặc trình mô phỏng.

    2. Dừng ứng dụng vùng chứa. Bước này rất quan trọng khi bạn gỡ lỗi trong trình mô phỏng. Nếu bạn không làm điều đó, Xcode sẽ cho bạn biết trình mô phỏng đang được sử dụng.

    3. Trong Xcode, nhấn menu Gỡ lỗi -> Đính kèm với Quy trình -> Theo Bộ nhận dạng quy trình (PID) hoặc Tên ..., nhập mã định danh của ứng dụng, ví dụ: com.abc.ContainerApp.MyExtension, để bắt đầu gỡ lỗi. Đừng quên đặt các điểm ngắt. (Cập nhật vào ngày 25 tháng 8 năm 2014: bạn có thể nhập trực tiếp MyExtension (tên tiện ích mở rộng của bạn).)

    4. Trong thiết bị hoặc trình mô phỏng, hãy mở tiện ích ứng dụng của bạn.


Cập nhật vào ngày 23 tháng 8 năm 2014:

Tôi thấy các bước gỡ lỗi ở trên không hoạt động tốt trên Xcode 6 beta 6 với iOS 8 SDK beta 5 trên trình mô phỏng.

Giải pháp:

  1. Chạy tiện ích mở rộng của bạn trong trình mô phỏng.
  2. Xcode menu Gỡ lỗi -> Đính kèm vào Quy trình -> Chọn "MyExtension (tên tiện ích mở rộng của bạn)" trong phần Hệ thống trong menu.

Các điểm ngắt hoạt động. Nhưng tôi không biết tại sao các bản ghi không hiển thị trong cửa sổ đầu ra.


8
Cho đến nay, cách dễ nhất để gỡ lỗi (và xem NSLog) mà tôi tìm thấy là làm theo các bước sau: /// 1 /// Chọn giản đồ ứng dụng vùng chứa và chạy nó. /// 2 /// Sau khi thiết lập và chạy - chuyển trở lại XCode và (thậm chí không cần nhấn nút Dừng) chọn một lược đồ mở rộng, sau đó nhấn nút Chạy. /// 3 /// Khi được nhắc chọn ứng dụng để chạy, hãy chọn Hôm nay. /// 4 /// Bây giờ các điểm ngắt và NSLog sẽ hoạt động mà không gặp sự cố.
gián đoạn

1
Điều này không hoạt động ngay cả ngày hôm nay, đặc biệt là sau một sự cố. Điều này là rất khó chịu, tôi không hiểu tại sao rất khó để sửa chữa.
Cristi Băluță

3
Tôi đã cố gắng sử dụng các hướng dẫn cập nhật ở trên và nó phù hợp với tôi. Tuy nhiên, trong bước 2, thay vì sử dụng tên tiện ích mở rộng của mình, tôi đã sử dụng "Theo số nhận dạng quy trình (PID) hoặc Tên ..." và nhập pid của quy trình. Điều này cho phép tôi sử dụng điểm nghỉ của mình một cách kỳ diệu.
tony.tc.leung

Debug> Đính kèm để xử lý bởi PID hoặc tên: trong lĩnh vực văn bản nhập vào tên quá trình trong navigator gỡ lỗi, một cái gì đó giống như com.company.AppName.AppName-ExtensionName
TigerCoding

Câu trả lời này không liên quan đến câu hỏi. OP đang hỏi tại sao thông báo NSLog không được ghi vào bảng điều khiển trong một tiện ích mở rộng (một mối quan tâm chính đáng khi tôi đến trang này với cùng một câu hỏi). Anh ấy không đề cập gì về các vấn đề kết nối với trình gỡ lỗi.
Joey Carson

49

Tôi cũng đang gặp vấn đề này. Nó hoạt động đối với tôi nếu bạn truy cập Trình mô phỏng của mình dưới menu Gỡ lỗi -> Mở Nhật ký Hệ thống ...

Từ đây, bạn có thể xem tất cả nhật ký của Trình mô phỏng iPhone (bao gồm nhật ký của tiện ích mở rộng của bạn).

nhập mô tả hình ảnh ở đây


nó sẽ mở "~ / Library / Logs / CoreSimulator / <DEVICE_IDENTIFIER> /system.log" để bạn có thể dễ dàng tìm thấy tất cả các nhật ký thiết bị giả lập khác của mình, chỉ cần thay thế <DEVICE_IDENTIFIER> bằng ID thiết bị giả lập
Hofi

32

NSLogđang hoạt động hoàn hảo .

Bạn chỉ không thấy những gì đang được ghi trong khu vực gỡ lỗi của Xcode vì trình gỡ lỗi Xcode không được đính kèm với tiện ích mở rộng của bạn. Các tiện ích mở rộng gần như hoàn toàn độc lập với ứng dụng chứa chúng. Ví dụ: chúng có các số nhận dạng gói riêng biệt và chúng cũng là các quy trình riêng biệt trên HĐH.

Tôi đã có nhiều thành công trong việc đưa Xcode đính kèm vào các tiện ích mở rộng. Có vẻ như nó sẽ tự động đính kèm và nó xuất hiện trong trình điều hướng gỡ lỗi là "Đang chờ đính kèm", nhưng không bao giờ đính kèm.

Đôi khi, tôi có thể chạy mục tiêu tiện ích mở rộng của mình trong Xcode:

nhập mô tả hình ảnh ở đây

Và sau đó có tùy chọn để chọn ứng dụng để chạy tiện ích mở rộng của tôi. Trong trường hợp này, tôi sẽ chọn đề xuất của nó là "hôm nay", là trung tâm thông báo.

nhập mô tả hình ảnh ở đây

Và sau đó, đôi khi nó sẽ đính kèm trình gỡ lỗi vào tiện ích mở rộng của tôi. Lưu ý rằng phương pháp này chỉ hoạt động trên các thiết bị vật lý.

Nếu nó không đính kèm, bạn có thể sử dụng phương pháp đính kèm thủ công trong câu trả lời của @ VinceYaun,

Tôi cũng đã đạt được nhiều thành công khi sử dụng các phương pháp chấp trước khác. Hầu hết đều không thành công và có vẻ như chúng chỉ là những lỗi sẽ được sửa vào một ngày sau đó.

Để xem thông báo nhật ký của bạn, bạn truy cập Window-> Devicesở thanh trên cùng và chọn thiết bị của bạn. Bạn có thể hiển thị nhật ký thiết bị từ cuối cửa sổ đó. Nếu bạn đang thử nghiệm trên trình mô phỏng, bạn có thể sử dụng câu trả lời của @ BalestraPatrick .

Một số lỗi đã được sửa trong bản Beta 2 và tôi đoán là cuối cùng trình gỡ lỗi sẽ tự động đính kèm khi khởi chạy tiện ích mở rộng.

Cập nhật: Trong ghi chú phát hành iOS 8 Beta 4 :

Phần mở rộng

Đã sửa trong bản beta 4

  • Các tiện ích mở rộng đôi khi không khởi chạy được khi gỡ lỗi từ Xcode.
  • Khi Tiện ích mở rộng có giao diện người dùng bị hủy, nó sẽ khởi chạy lại và không bị loại bỏ.
  • Đôi khi, tiện ích Chia sẻ hoặc Hành động của bạn có thể bị treo.
  • Việc triển khai lại tiện ích mở rộng có thể vô hiệu hóa nó trong Trung tâm thông báo.

bạn đã thử cách tiếp cận tương tự cho Tiện ích mở rộng bộ nhớ chưa?
SRP-Achiever

Nó không hoạt động với tôi trong Xcode 6 beta 2, nhưng câu trả lời của Vince Yuan thì có. Thật không may, trong Xcode 6 beta 3, gỡ lỗi tiện ích mở rộng không hoạt động đối với tôi. Tôi không tìm thấy giải pháp cho vấn đề đó, có lẽ chúng ta phải đợi bản phát hành tiếp theo.
Darrarski

@Darrarski Câu trả lời của tôi vẫn còn sót lại từ Beta 1. FYI, Beta 3 đã ra mắt, vì vậy bạn nên tiếp tục nó ngay bây giờ.
Santa Claus

@SantaClaus khá rõ ràng. Nhận xét của tôi là để thông báo rằng không có giải pháp nào trong số các giải pháp nhất định hoạt động trong Xcode 6 beta 3 cho tôi. Có vẻ như gỡ lỗi tiện ích mở rộng thậm chí còn bị phá vỡ nhiều hơn trong bản phát hành này. Hãy hy vọng bản beta tiếp theo sẽ khắc phục sự cố.
Darrarski

3
Không có lỗi nào trong số đó được tôi sửa trong bản beta 4 (bây giờ là bản beta 5).
matt

18

Tôi cũng đang gặp vấn đề này. Xcode không bao giờ đính kèm trình gỡ lỗi của tôi vào tiện ích mở rộng hoặc hiển thị thông báo NSLog. Nếu bạn đính kèm trình gỡ lỗi Xcode theo cách thủ công vào quy trình mở rộng của mình, thì ít nhất các điểm ngắt hoạt động giống như một sự quyến rũ:

Debug->Attach to process->Your extension name (mine was "com.example.MyExtensionApp.MyExtension")

5
Tôi đã gặp may mắn với điều này.
Santa Claus

2
upvote, nhưng không phải lúc nào cũng hoạt động, hy vọng apple có thể tự động đính kèm trình gỡ lỗi vào các tiện ích mở rộng trong các bản phát hành trong tương lai.
Jing

14
  1. Tạo lược đồ cho tiện ích của bạn
  2. Chạy chương trình
  3. Trong hộp thoại, hãy chọn ứng dụng vùng chứa
  4. Thưởng thức

Nó phù hợp với tôi :)


Đây chính là điều tôi cần
pob21

1
NSLogsẽ chỉ hoạt động nếu bạn đang chạy ứng dụng vùng chứa. Nó sẽ không hoạt động nếu bạn đang chạy tiện ích mở rộng ứng dụng thay vì vùng chứa.
JaredH

Cái này cũng có tác dụng với tôi. Cảm ơn bạn, Maciek Czarnik! Các giải pháp trên không hiệu quả với tôi. Tôi đang sử dụng Xcode 8.1.
plam4u

5

Xcode 8 có thể gỡ lỗi các phần mở rộng:

  1. Chọn lược đồ mở rộng trong tổ hợp bên cạnh nút dừng và chạy nó.
  2. Chọn ứng dụng mẹ trong hộp thoại xuất hiện.

Kết quả: các điểm ngắt và nhật ký hoạt động như bình thường.


2
Không hoạt động trong trường hợp tiện ích mở rộng Hôm nay của tôi. nhận được lỗi Clang: ld: thư viện không tìm thấy cho -lRPush kêu vang: lỗi: mối liên kết lệnh thất bại với mã exit 1 (-v sử dụng để xem invocation)
BadmintonCat

Đây là một lỗi không liên quan. Bạn đang cố gắng liên kết đến một thư viện bị thiếu. Thêm Liferay-Push vào mục tiêu của bạn.
Jano

4

Điều gì cuối cùng đã cho phép tôi xem nhật ký trong khu vực gỡ lỗi, dựa trên đề xuất của Michaeltài liệu của Apple , là:

Xây dựng và chạy tiện ích mở rộng ứng dụng trong trình mô phỏng và khi được nhắc về một ứng dụng lưu trữ, hãy chọn ứng dụng cụ thể mà bạn sẽ gọi tiện ích mở rộng . Trong trường hợp của tôi, tôi đang khởi chạy tiện ích mở rộng Hành động của mình từ Safari bằng cách kéo một trang chia sẻ lên PDF.

Điều không hoạt động trước đây là làm theo đề xuất của người khác về việc sử dụng Today làm máy chủ lưu trữ nhưng sau đó rời ứng dụng đó và chuyển đến Safari để gọi tiện ích mở rộng của tôi. Tôi thậm chí không cần phải chạy ứng dụng chứa của mình trước khi chạy tiện ích mở rộng.

Từ Tài liệu của Apple:

Trong giai đoạn Chạy của lược đồ tiện ích mở rộng của bạn, bạn chỉ định một ứng dụng máy chủ lưu trữ làm tệp thực thi. Khi truy cập tiện ích mở rộng thông qua giao diện người dùng của máy chủ lưu trữ được chỉ định đó, trình gỡ lỗi Xcode sẽ gắn vào tiện ích mở rộng.


1

Tôi thực sự có các bản ghi để chạy khá đơn giản trong Xcode 6.3. Đầu tiên, xây dựng và chạy ứng dụng có chứa. Khi ứng dụng chứa đang chạy trên thiết bị, hãy xây dựng và chạy tiện ích mở rộng ứng dụng bằng cách thay đổi lược đồ thành tiện ích mở rộng ứng dụng.

Apple có tài liệu liên quan trực tiếp đến gỡ lỗi, lập hồ sơ và thử nghiệm tiện ích mở rộng ứng dụng của bạn.


1

Một thủ thuật phù hợp với tôi (mặc dù nó khá xấu xí) là đặt một hình nộm UILabelở góc dưới cùng của tiện ích mở rộng của tôi. Tôi thường gọi nó logLabel. Sau đó, có thể cập nhật văn bản của nhãn này với bất kỳ câu lệnh nhật ký nào mà bạn muốn ghi lại. Cách tiếp cận như vậy không tốt lắm nếu bạn cần ghi lại các câu lệnh từ các phiên bản của các lớp khác nhau. Và, rõ ràng, nó làm lộn xộn giao diện người dùng của bạn.

Tuy nhiên, nếu bạn có một widget khá đơn giản và bạn không bận tâm về việc giao diện người dùng bị lộn xộn, thì đây là một mẹo nhỏ. Tôi đã thử tất cả các giải pháp khác được nêu trong cuộc thảo luận này và thật đáng buồn là không có giải pháp nào trong số đó hiệu quả với tôi.


1

Cách duy nhất để gỡ lỗi hoạt động đối với tôi là chọn Gỡ lỗi-> Đính kèm Để Xử lý Bằng PID hoặc Tên Sau đó nhập PID không phải tên tiện ích mở rộng. Bạn có thể tìm thấy PID bằng cách chạy tiện ích mở rộng trên thiết bị, đi tới Window-> Devices. Tìm thiết bị của bạn và xem bảng điều khiển. Khi bạn thấy tên của tiện ích mở rộng của mình, theo sau là số có 5 chữ số. Đó là PID

Tôi cũng đặt một loạt NSLog trong tiện ích mở rộng để tìm PID. Đây là trên xCode 7


1

Gặp phải vấn đề tương tự về phần mở rộng cho NSLogvà điểm ngắt. Tôi đã chiến đấu với nó nhiều ngày.

Device logcó thể được tìm thấy như hình ảnh sau đây. Nó ởXCode -> Window -> Devices and Simulators .

Sau khi nhập Open Console, có một trường tìm kiếm ở trên cùng bên phải của hộp thoại. Tôi có thể áp dụng quy tắc bộ lọc trong đó. Ví dụ: tên quy trình có chứa Notificationtừ khóa hoặc tên quy trình phải bằng tên của mục tiêu mở rộng, ví dụ: bằng với MyNotificationServiceExtensiontên quy trình.

Nhật ký thiết bị


0

Rõ ràng là có gì đó bị hỏng trong Xcode6-B5.

Nếu tôi cố gắng chạy tiện ích mở rộng Ảnh trên Trình mô phỏng, tôi không thể thấy bất kỳ ứng dụng Ảnh nào dưới dạng tùy chọn cho quá trình đính kèm tiện ích mở rộng.

tùy chọn gỡ lỗi trong trình mô phỏng

Tương tự, chạy trên một thiết bị thực, hãy cho tôi hành vi chính xác.

các tùy chọn gỡ lỗi trong một thiết bị thực

Trong trường hợp đầu tiên, bất kỳ điểm ngắt nào không được tôn trọng. Trong trường hợp thứ hai, các điểm ngắt hoạt động giống như một sự quyến rũ.


0

Bạn nên biết rằng ứng dụng vùng chứa và tiện ích mở rộng hoàn toàn là hai quá trình khác biệt trong iOS trong khi LLVM chỉ gỡ lỗi một chuỗi một lần, vì vậy khi bạn gỡ lỗi, bảng điều khiển không bao giờ ghi lại tiện ích mở rộng và không bao giờ dừng lại ở điểm ngắt.

Bạn có thể giải quyết hầu hết các vấn đề bằng phương pháp của @Vince Yuan.

Tuy nhiên, vấn đề của tôi là trình gỡ lỗi Xcode hầu như không kết nối với tiện ích mở rộng bàn phím của tôi trên cả iOS Simulator và thiết bị, giống như 1 lần trong 7-8 lần chạy, Đó hoàn toàn là vấn đề xác suất. Phương pháp của @Vince Yuan đôi khi cũng hoạt động.

Kinh nghiệm nhỏ của tôi là khi bạn chạy lược đồ gỡ lỗi, nếu Phiên gỡ lỗi trong bảng điều khiển bên trái hiển thị là 'Không có phiên gỡ lỗi', thì không cần phải mở tiện ích mở rộng của bạn và kiểm tra nó, trình gỡ lỗi không hoạt động, chỉ cần chạy một lần nữa cho may mắn.

nhưng khi bạn thấy com.xxx.xxx.xxx đang đợi Đính kèm, tiện ích mở rộng chắc chắn có thể được gỡ lỗi.

Đây là một mẹo nhỏ cho những người không thể gỡ lỗi tiện ích mở rộng iOS, đặc biệt là tiện ích mở rộng bàn phím.


0

Kể từ Xcode 6 Beta 5, tôi đã có thể sử dụng một thiết bị thực tế chạy iOS8 để gỡ lỗi tiện ích mở rộng của mình. Hãy thử chạy nó trên một thiết bị và chọn Safari để khởi chạy


0

Để khắc phục tất cả các trạng thái do luôn thay đổi IDE, tôi đang sử dụng iOS Console của Lemonjar.com - nó hiển thị cửa sổ bảng điều khiển cho bất kỳ thiết bị iOS nào được kết nối hiển thị thông báo nhật ký hệ thống bất kể ID quy trình. Bạn có thể thấy cả thông báo nhật ký gỡ lỗi ứng dụng và tiện ích mở rộng cùng một lúc tại đây.


0

Tôi có thể gỡ lỗi tiện ích mở rộng của mình bằng cách tôi mô tả bên dưới:

  1. Xcode : Debug-> Attach to process by PID or Name. Tên lược đồ tiện ích mở rộng của bạn.
  2. Sau đó chọn của bạn main app targetvà chạy.

Tôi hy vọng nó cũng làm việc cho các bạn.

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.