'Tên dự án' được biên soạn với tối ưu hóa - bước có thể hành xử kỳ quặc; các biến có thể không có sẵn


210

Cố gắng bước vào mã AFNetworking tạo cảnh báo sau:

[Project Name] was compiled with optimization - stepping may behave oddly; variables may not be available.

Và tất nhiên tôi không thể gỡ lỗi mã. Để được cụ thể, tôi đang cố gắng gỡ lỗi UIImageView+AFNetworkingdanh mục dường như không thể. Thay đổi mã không có hiệu lực (đã thử NSLog, v.v.) và khi cố gắng bước vào trình biên dịch sẽ chuyển sang mã lắp ráp và hiển thị UIImageView+TVASTAFNetworkingdưới dạng tên danh mục không tồn tại ở bất kỳ đâu trong cơ sở mã.

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

Sử dụng Xcode 7. iOS 9 & 8. Cocoapods (không có khung)

CẬP NHẬT Tôi quên đề cập rằng Trình tối ưu hóa được đặt thành nonecho cả cấu hình phát hành và gỡ lỗi và trên thực tế tôi đang sử dụng Debugcấu hình.

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

CẬP NHẬT 2

Strip Debug Symbols Là tắt như là tốt.


Tôi nhớ có một số tùy chọn "Biểu tượng gỡ lỗi dải". Điều đó có thể sẽ gây ra vấn đề này. Là nó tắt?
NobodyNada

1
@NobodyNada Có Strip Debug Symbolslà tắt.
Mojtaba

Thật lạ là tôi vừa thử bật Biểu tượng gỡ lỗi dải và cảnh báo biến mất 8- |
Gomino

@Mojtaba Này, bạn đã tìm ra cách giải quyết vấn đề chưa? Tôi bị mắc kẹt với cùng một vấn đề kể từ khi cập nhật lên Xcode 7
Hadu

@Hadu: Thật không may
Mojtaba

Câu trả lời:


175

Nếu dự án của bạn đang sử dụng Swift, có hai cài đặt "Mức tối ưu hóa" riêng biệt trong cấu hình dự án / mục tiêu.

Hãy chắc chắn rằng bạn đặt cả hai chính xác:

  1. Chọn dự án của bạn trong khung Project Navigator
  2. Chọn cài đặt của dự án của bạn trong cây "DỰ ÁN"
  3. Nhấp vào tab "Xây dựng cài đặt"
  4. Tìm kiếm "Mức tối ưu hóa" và bạn sẽ thấy hai cài đặt, một cho LLVM và một cho nhanh chóng.
  5. Đặt cài đặt thích hợp ( None [-O0]cho LLVM và None [-0none]cho Swift) cho cấu hình bản dựng được đề cập.

được biên dịch với bước tối ưu hóa có thể hành xử kỳ quặc có thể không có sẵn

Làm điều này giải quyết cảnh báo đó cho tôi.


1
Điều gì với các dự án ngôn ngữ hỗn hợp ...?
Vive

Sự khác biệt giữa LLVM & Swift là gì? Là nó mà Swift là những gì tôi đã viết trong dự án và LLVM là dành cho bất cứ điều gì tôi đang làm liên quan đến gỡ lỗi trong trình gỡ lỗi tức là những thứ như po, p, expr...?
Mật ong

124

Có vẻ như dự án của bạn đang ở chế độ Phát hành. Chế độ phát hành biên dịch ứng dụng với rất nhiều tối ưu hóa, nhưng trình gỡ lỗi ghét tối ưu hóa, vì vậy để gỡ lỗi ứng dụng một cách đáng tin cậy, bạn cần chuyển nó sang chế độ Gỡ lỗi để giảm tối ưu hóa và thêm một loạt thông tin gỡ lỗi. Để chuyển nó sang chế độ Gỡ lỗi:

  • Nhấp vào lược đồ của bạn ở góc trên bên trái của Xcode.

Nhấp vào lược đồ của bạn ở góc trên bên trái của Xcode.

  • Chọn "Chỉnh sửa lược đồ ..."

Chọn "Chỉnh sửa lược đồ ..."

  • Nhấp vào menu thả xuống "Cấu hình xây dựng". và thay đổi nó sang chế độ Gỡ lỗi.

Nhấp vào menu thả xuống "Cấu hình xây dựng".


8
Tôi đang sử dụng gỡ lỗi. và chắc chắn tối ưu hóa là TẮT.
Mojtaba

Điều này thật thú vị. Ngoài ra bởi vì tôi đã đặt nó ở chế độ Phát hành, một số điểm dừng của tôi không bị tấn công trong khi một số điểm khác bị tấn công ¯_ (ツ) _ / ¯
Mật ong

59

Cảnh báo này chỉ xuất hiện khi bạn đạt điểm dừng và nguồn nằm trong dự án nơi bật tối ưu hóa, ngăn bạn xem các giá trị biến thực (mọi đối tượng được hiển thị là không, ngay cả khi không)

Trong trường hợp của tôi, nó chỉ xảy ra khi gỡ lỗi từng bước thông qua một phụ thuộc cocoapod.

Vì vậy, ngay cả khi bạn đã cài đặt chính xác các cài đặt mục tiêu và dự án chính của mình (Biểu tượng gỡ lỗi dải = TẮT và mức Tối ưu hóa), bạn cần đảm bảo nó giống với dự án Pod mà bạn đạt được điểm dừng.

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


Đọc câu trả lời khác, họ đang đề nghị như vậy. nhưng tất cả đều tắt trong dự án của tôi (aka None [-O0])
Mojtaba

2
Tôi biết bạn nói rằng nó bị tắt trong projet của bạn, giống như nó là của tôi, nhưng bạn đã xem cấu hình dự án phụ thuộc Pod của bạn chưa?
Gomino

Vấn đề tương tự ở đây với Xcode 7. Có lẽ vấn đề đã xuất hiện khi tôi bắt đầu sử dụng thư viện trachkerbird. Nhưng điểm dừng là bên trong mã của riêng tôi.
Mike

1
Đối với dự án Pods, thay đổi cài đặt mức tối ưu hóa "DỰ ÁN" thành Không hoạt động. (không thay đổi cho bất kỳ mục tiêu pod).
ooops

2
Điều này là không đúng. Nó sẽ bị ghi đè khi bạn pod installmột lần nữa. Thay đổi nó như thế này .
Iulian Onofrei

13

Hóa ra sau khi nhập một dự án cũ (Xcode 7.x +) sang Xcode 8.3 mới (8E162), có thể do tối ưu hóa trình biên dịch, Trình biên dịch Swift - Mức tối ưu hóa được đặt theo mặc định là Tối ưu hóa một tệp nhanh :

Trước

Thay đổi nó thành không, giải quyết vấn đề:

sau


Tôi đã làm nó. Không làm việc cho tôi. Tôi đang đối mặt với vấn đề này trong bản dựng ios được Unity tạo ra.
Chandni

11

Editor-> Validate Settingssau đó xác nhận tất cả các thay đổi. Sau đó, bạn sẽ nhận đượcMức tối ưu hóa trình biên dịch Swift tại chỗ

Đặt gỡ lỗi thành None.


1
Tôi đã làm nó. Không làm việc cho tôi. Tôi đang đối mặt với vấn đề này trong bản dựng ios được Unity tạo ra.
Chandni

9

Đây là giải pháp cho tôi ...

Theo dòng câu trả lời của gimino, nếu bạn đang sử dụng cocoapods, hãy thêm một dòng như thế này vào Podfile:

xcodeproj 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug

hoặc cho các phiên bản cocoapods> = 1.0 (cảm ơn Diejmon)

project 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug

Trong đó MyProject có 'Gỡ lỗi - cục bộ', 'Gỡ lỗi - dàn dựng', 'Gỡ lỗi - SẢN XUẤT' dưới dạng cấu hình gỡ lỗi ngoài tiêu chuẩn 'Gỡ lỗi'

Theo mặc định, cocoapod thường sẽ tạo cấu hình pod dưới dạng Phát hành, dòng Podfile này cho phép bạn nói với chúng rằng chúng đang gỡ lỗi.


9

Tôi đã gặp vấn đề tương tự ngày hôm nay, và tìm ra nó (ít nhất là trong trường hợp của tôi). Tôi cũng đang sử dụng CocoaPods và tôi đã gặp vấn đề này khi chạy mục tiêu thử nghiệm của mình (Swift trộn với ObjC).

Tôi đang sử dụng Xcode 7.2, với SDK iOS 9.2.

Trong hình ảnh bên dưới, bạn có thể thấy các tối ưu hóa cho mục tiêu và dự án trước khi tôi thay đổi:

mức tối ưu hóa trước khi thay đổi

Điều đáng ngạc nhiên là mặc dù Optimization giải quyết là None [-O0] , chỉ sau khi thay đổi các thiết lập dự án từ -os để -O0 đã dừng biên dịch tối ưu hóa các mục tiêu.

Dưới đây bạn có thể thấy các cài đặt cuối cùng của tôi:

mức tối ưu hóa sau khi thay đổi


7

Đó là một thời gian dài nhưng cuối cùng tôi đã giải quyết vấn đề. Có một lá cờ tối ưu hóa thứ ba LTOhoặc Link Time Optimizationđáng ngạc nhiên là không ai đề cập đến nó ở đây và vì một số lý do tôi cũng không chú ý đến nó. Nó ở ngay phía trên Optimization Levelcài đặt như bạn có thể thấy trong nhiều ảnh chụp màn hình được đăng ở đây.

Vì vậy, để tóm tắt, có 3 cờ tối ưu hóa khác nhau mà bạn muốn tắt để gỡ lỗi:

  • Tối ưu hóa thời gian liên kết LLVM ( -flto)
  • Mức tối ưu hóa LLVM ( -O)
  • Mức tối ưu hóa trình biên dịch Swift

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

Thông tin thêm về LTO: http://llvm.org/docs/LinkTimeOptimization.html


2
Tôi đã làm nó. Không làm việc cho tôi. Tôi đang đối mặt với vấn đề này trong bản dựng ios được Unity tạo ra.
Chandni

@Chandni, Ở đây tôi gặp phải vấn đề tương tự bạn đã tìm ra giải pháp chưa?
Ranigate

2

Nếu bạn cần vô hiệu hóa tối ưu hóa cho các nhóm Swift của mình để bạn có thể gỡ lỗi vào chúng, hãy thêm các mục sau vào Podfile. Điều này sẽ vô hiệu hóa tối ưu hóa cho các bản dựng gỡ lỗi.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      if config.name == "Debug"
        config.build_settings["SWIFT_OPTIMIZATION_LEVEL"] = "-Onone"
      end
    end
  end
end

1

Bạn có chắc chắn cấu hình gỡ lỗi của bạn không tối ưu hóa mã (không nên)? Có vẻ như bạn đã vô tình kích hoạt tối ưu hóa cho cấu hình gỡ lỗi và bạn nên tắt nó khỏi cài đặt của mục tiêu.


3
tối ưu hóa là tắt cho tất cả mọi thứ. thậm chí phát hành bản dựng chỉ để đảm bảo
Mojtaba

@Mojtba Nhưng chế độ phát hành bật tối ưu hóa!
NobodyNada

0

Lỗi này đã xảy ra với tôi hai lần và trong mọi trường hợp là một lỗi trong tham số URL được sử dụng để yêu cầu dịch vụ. Trong một trường hợp, URL có một số khoảng trống trong phần cổng trong trường hợp khác, một số Giá trị tùy chọn không được mở.

Vì vậy, sửa chữa là để chắc chắn url cho yêu cầu được hình thành tốt. Thông tin thêm về trường hợp của tôi và báo cáo tương tự ở đây .


0

Tất cả những gì tôi đã làm là Dọn dẹp ( Product > Clean) dự án của mình và chạy lại nó


0

Đây có thể là một sự đơn giản hóa, nhưng bạn đang xây dựng Bản phát hành hoặc với tối ưu hóa (loại bỏ các biểu tượng khỏi Swift hoặc LLVM) quá cao? Nếu vậy, hãy chỉnh sửa lược đồ của bạn và chuyển sang Gỡ lỗi hoặc chỉnh sửa Cài đặt bản dựng để tối ưu hóa nhanh chóng hoặc LLVM thành Không (0).


0

Chỉ trong trường hợp ai đó đang đối mặt với vấn đề này trong khi gỡ lỗi một pod sử dụng thư viện C bên trong, có một điều khác bạn phải thay đổi trong cài đặt dự án để làm cho nó hoạt động cùng với mọi thứ khác được liệt kê trong luồng.

Chuyển đến cài đặt dự án Pods -> Mục tiêu sử dụng C của bạn -> Cài đặt bản dựng -> Apple Clang - Cờ trình biên dịch tùy chỉnh -> Cờ C khác và xóa -O3cờ đã đạt được bằng cách nào đó.

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.