Trình gỡ lỗi Xcode không in các đối tượng và hiển thị con số không, khi chúng không


165

Xcode hiển thị lỗi khi cố in một đối tượng po <objectName>, nhưng chỉ cho một dự án.

Ảnh chụp màn hình

lỗi: Không thể cụ thể hóa struct: kích thước của biến <varName> không đồng ý với kích thước của ValueObject bị xóa trong Thực thi, không thể Chuẩn bịExExuteute

Trình gỡ lỗi Xcode cũng hiển thị TẤT CẢ các đối tượng dưới dạng nil( selfbị loại trừ), khi chúng không ( NSLoghiển thị đầu ra chính xác, như đã thấy trong hình ảnh). Tôi không biết có gì sai với dự án. Mỗi dự án khác hoạt động tốt.

Bất cứ ý tưởng những gì nó có thể được? (Làm sạch dự án không có hiệu lực.)


Đối với tôi nghe có vẻ như một số vấn đề con trỏ, nhưng tôi chắc chắn hoàn toàn chắc chắn trung thực. Bạn đang cố gắng làm gì / hoàn thành?
dùng2967030

3
Lỗi xảy ra trên mọi đối tượng của dự án đó. Thậm chí NSStrings đã tạo một dòng trên điểm dừng!
Binary

1
Như đã nói trong câu hỏi, việc dọn dẹp không thay đổi bất cứ điều gì; (nhưng cảm ơn vì đã thử. Đã thêm thông báo lỗi.
Binary

3
Bạn có chắc chắn rằng bạn đang xây dựng mà không tối ưu hóa? (-O0)
iccir

1
Tối ưu hóa có thể được thiết lập không chỉ trong cài đặt dự án mà còn trong các mục tiêu. Có m bị kẹt :(
húng quế

Câu trả lời:


269

Bạn có chắc là bạn không ở trong "Chế độ phát hành"?

Nếu bạn muốn xem các giá trị thay đổi, bạn phải ở "Chế độ gỡ lỗi" (nhấp vào tên dự án của bạn ở góc trên cùng bên trái gần nút bắt đầu / dừng, sau đó "Chỉnh sửa lược đồ ...", sau đó "Chạy" cài đặt, sau đó "Cài đặt" Tab thông tin ", sau đó" Xây dựng cấu hình ". Ở đây đặt" Gỡ lỗi ". Nếu đó là trên" Phát hành "thì đó là vấn đề bạn thấy tất cả các nils).


3
Tôi chỉ có một cấu hình, làm thế nào để thay đổi cấu hình sao cho giống debug configuration?
Binary

2
À, tôi đã tạo một dự án trống và bây giờ có thể thấy tất cả sự khác biệt trong Build Settings, thuộc tính triển khai Strip debug symbols during copyđược đặt thành CÓ.
Binary

16
@ Alex1987 tôi đặt Strip debug symbols during copyđể NOOptimization Levelđể None -O0trong dự ánBuild Settings
Binarian

32
Thật không may, trong một số trường hợp, lldb đã làm điều này khi ở chế độ gỡ lỗi, tắt tối ưu hóa và các biểu tượng gỡ lỗi. Thời gian truy cập báo cáo lỗi.apple.com
ctpenrose

4
Có cùng một vấn đề - Mức tối ưu hóa là "Không". Vấn đề là Tối ưu hóa thời gian liên kết (LTO) cũng được đặt thành "Có" cho chế độ gỡ lỗi.
pi3

38

Tôi đã đặt "Mức tối ưu hóa" cho cấu hình Gỡ lỗi thành "Không" và nó đã giải quyết được vấn đề.


2
Thật buồn cười, điều đó đã không làm việc. Tôi đã làm ngược lại. Tôi chuyển sang Fastest, Smallest[-Os]và nó hoạt động.
Mũ Nate

Rất nhiều đề xuất khác nhau, nhưng cái này (đặt tối ưu hóa gỡ lỗi thành Không) đã sửa nó cho tôi.
Dejal

29

Đảm bảo rằng Bộ khử trùng địa chỉ được tắt trong cài đặt Lược đồ của bạn. Trình khử trùng địa chỉ không hoạt động tốt với trình gỡ lỗi.

  1. Chuyển đến Chỉnh sửa lược đồ (Sản phẩm >> Lược đồ >> Chỉnh sửa lược đồ), chọn Chạy và chuyển đến tab Chẩn đoán.
  2. Đảm bảo "Bật địa chỉ vệ sinh" tắt.

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


4
Đây là giải pháp cho tôi. Rõ ràng có rất nhiều lý do điều này có thể xảy ra mặc dù.
manroe

16

Dường như ai cũng có giải pháp riêng.

Đối với tôi, tôi sử dụng Objective-CSwiftcùng một lúc.

Trước hết, đi đến TARGETS -> Build Settingsvà tìm kiếmcode generation

Bạn sẽ tìm Apple LLVM 6.0Swift Compiler

Thay đổi Optimization Leveltất cả thành None, sau đó gỡ lỗi, bạn có thể tìm thấy giá trị khôngnil

Thật ngạc nhiên khi bạn có thể thấy giá trị, bạn giải quyết vấn đề này vĩnh viễn, sau đó bạn có thể thay đổi giá trị Optimization Levelsử dụng.


11

Có những cách khác điều này có thể xảy ra. Đối với tôi, đó là vì giá trị "Các cờ C khác" được đặt thành "-O2", ngay cả đối với bản dựng gỡ lỗi. Tắt cái này cho bản dựng gỡ lỗi đã giải quyết vấn đề.


9

Lọc đầu ra gỡ lỗi

Đối với tôi, Xcode đã lọc ra đầu ra của trình gỡ lỗi. Đảm bảo rằng cài đặt đầu ra của bạn là Đầu ra của trình gỡ lỗi hoặc Tất cả đầu ra


6

Tôi vừa gặp phải sự cố này và thấy rằng đó là do Deployment Postprocessing = YEStrong Cài đặt bản dựng.

Thay đổi điều này để NOsửa nó, như trong ảnh chụp màn hình bên dưới:

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

Phiên bản Xcode: 6.0.1 (6A317) trên OSX 10.9.5


5

Tôi chỉ gặp phải một vấn đề tương tự: Tại một thời điểm, trình gỡ lỗi Xcode đã in ra một số loại đối tượng, đặc biệt là NSStrings dưới dạng (null) mặc dù chúng được khởi tạo với một giá trị. In ra thông qua

NSLog(@"String value: %@", myString);

giá trị chính xác cho đối tượng đã được hiển thị.

Gây nhầm lẫn! Giải quyết vấn đề khá dễ dàng: Tôi chỉ cần tắt Xcode và khởi động lại máy tính của mình. Sau khi tôi khởi động lại Xcode, mọi thứ sẽ hoạt động tốt trở lại :).


5

Đảm bảo Link-Time Optimization = Nocho chế độ gỡ lỗi trong Cài đặt bản dựng.


Tôi chỉ gặp vấn đề này trong Xcode 8 chỉ trên cài đặt xây dựng khung động của tôi! Thx
vmeyer

3
  1. Xóa dữ liệu phái sinh
  2. Khá mã Xcode / Khởi động lại
  3. Dự án sạch

Đó là tất cả những gì tôi cần.


2

Các giải pháp ở đây cũng sẽ sửa lỗi mà bạn thấy error: <EXPR>:1:1: error: use of unresolved identifiermỗi khi bạn cố gắng pobiến.

Đối với tôi, giải pháp là đi đến Build Settingsvà tìm kiếm Optimization Levelvà đảm bảo mỗi Debugcài đặt được đặt thành None.


Điều này thực sự đã sửa nó cho tôi. Bất cứ ý tưởng nào về nhược điểm là vô hiệu hóa cài đặt?
Jasper

1

Chuyển đến "Cờ C khác" trong cài đặt bản dựng và đặt giá trị gỡ lỗi từ -o2 đến -O0


0

Tôi cũng đã gặp phải vấn đề này và khi tôi thấy tôi đang ở chế độ phát hành, tôi chuyển sang gỡ lỗi ... không sửa. Hóa ra tôi phải làm sạch trước (cmd + shift + k).

Vì vậy, tôi nghĩ điều xảy ra là sau khi được xây dựng trong chế độ phát hành, không phải mọi thứ đều được biên dịch lại trong quá trình phát triển và vì vậy lldb không thể đọc đúng các ký hiệu. Sau khi làm sạch và biên dịch lại trong phát triển, nó làm việc cho tôi.


-3

Thực tế là hệ thống sẽ hoạt động tốt và không phải do liên kết đến nhiều số lượng cài đặt khác nhau, đến mức mọi thứ có thể phù hợp với bạn hoặc không.

Tại sao hệ thống không cho phép luôn gỡ lỗi khi ở chế độ gỡ lỗi là một bí ẩn mà chỉ Apple mới có thể trả lời (nếu họ quan tâm, điều mà tôi nghi ngờ họ sẽ làm).

Xét cho cùng, sự khác biệt giữa gỡ lỗi / không gỡ lỗi sẽ là các bảng bổ sung với siêu dữ liệu chỉ lấp đầy không gian bộ nhớ / đĩa.

Nếu bạn đang biên dịch trực tiếp trên trình giả lập hoặc thiết bị, bạn sẽ không quan tâm đến những megabyte thừa đó.

Vì vậy, chúng ta cần chạy các vòng lặp bổ sung để chỉ làm một điều rất cơ bản và đơn giản mà tất cả các id mà tôi biết từ thế kỷ trước đều làm tốt.

Và để thêm vào, đối với tôi, những gì đã thay đổi trong "Gỡ lỗi" Tối ưu hóa thời gian liên kết từ "Nguyên khối" thành "Không" (xcode 8).


Xcode = Không có trình quản lý gói ngoài hộp, tự động hoàn thành và các tính năng khác hoạt động theo ý muốn, thời gian biên dịch rất lớn, v.v.
zirinisp
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.