'ชื่อโครงการ' ถูกคอมไพล์ด้วยการเพิ่มประสิทธิภาพ - การก้าวอาจทำงานผิดปกติ ตัวแปรอาจไม่พร้อมใช้งาน


211

การพยายามก้าวเข้าสู่รหัส AFNetworking จะสร้างคำเตือนดังต่อไปนี้:

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

และแน่นอนฉันไม่สามารถดีบักรหัสได้ โดยเฉพาะฉันพยายามตรวจแก้จุดบกพร่องUIImageView+AFNetworkingหมวดหมู่ซึ่งดูเหมือนเป็นไปไม่ได้ การเปลี่ยนรหัสไม่มีผลกระทบ (ลองทำNSLogฯลฯ ) และเมื่อพยายามทำขั้นตอนในคอมไพเลอร์ให้ไปที่รหัสแอสเซมบลีและแสดงUIImageView+TVASTAFNetworkingเป็นชื่อหมวดหมู่ที่ไม่มีอยู่ในฐานรหัส

ป้อนคำอธิบายรูปภาพที่นี่

ใช้ Xcode 7. iOS 9 และ 8 Cocoapods (ไม่มีกรอบ)

UPDATE ฉันลืมที่จะพูดถึงว่าเพิ่มประสิทธิภาพการตั้งค่าเพื่อnoneสำหรับทั้งการกำหนดค่าการปล่อยและการแก้ปัญหาและฉันในความเป็นจริงโดยใช้Debugการตั้งค่า

ป้อนคำอธิบายรูปภาพที่นี่

อัพเดท 2

Strip Debug Symbols ก็ปิดเช่นกัน


ฉันจำได้ว่ามีตัวเลือก "Strip Debug Symbols" บางตัวเลือก นั่นอาจจะทำให้เกิดปัญหานี้ มันออกไหม
NobodyNada

1
@NobodyNada ใช่Strip Debug Symbolsปิดอยู่
Mojtaba

แปลกฉันเพิ่งพยายามเปิด Strip Debug Symbol และคำเตือนหายไป 8- |
Gomino

@ Mojtaba เฮ้คุณรู้วิธีแก้ปัญหาเหรอ? ฉันติดอยู่กับปัญหาเดียวกันตั้งแต่อัปเดตเป็น Xcode 7
Hadu

@Hadu: น่าเสียดายที่ไม่มี
Mojtaba

คำตอบ:


175

หากโครงการของคุณใช้ Swift จะมีการตั้งค่า "ระดับการเพิ่มประสิทธิภาพ" แยกต่างหากสองรายการในการกำหนดค่าโครงการ / เป้าหมาย

ตรวจสอบให้แน่ใจว่าคุณตั้งค่าทั้งสองอย่างถูกต้อง:

  1. เลือกโครงการของคุณในบานหน้าต่าง Project Navigator
  2. เลือกการตั้งค่าโครงการของคุณภายใต้ต้นไม้ "PROJECT"
  3. คลิกที่แท็บ "สร้างการตั้งค่า"
  4. ค้นหา "ระดับการเพิ่มประสิทธิภาพ" และคุณจะเห็นการตั้งค่าสองรายการหนึ่งรายการสำหรับ LLVM และอีกหนึ่งรายการสำหรับการตั้งค่าที่รวดเร็ว
  5. ตั้งค่าที่เหมาะสม ( None [-O0]สำหรับ LLVM และNone [-0none]สำหรับ Swift) สำหรับการตั้งค่าบิลด์อิน

ถูกคอมไพล์ด้วยการเพิ่มประสิทธิภาพการก้าวอาจทำงานผิดปกติอาจไม่สามารถใช้ได้

การทำเช่นนี้แก้ไขคำเตือนสำหรับฉันแล้ว


1
สิ่งที่มีโครงการภาษาผสม ... ?
Vive

LLVM & Swift ต่างกันอย่างไร มันคือการที่สวิฟท์เป็นสิ่งที่ผมเขียนไว้ในโครงการและ LLVM สำหรับสิ่งที่ฉันทำในเรื่องที่เกี่ยวกับการแก้จุดบกพร่องในสิ่งดีบักเช่นเช่นpo, p, expr... ?
ฮันนี่

124

ดูเหมือนว่าโครงการของคุณจะอยู่ในโหมด Release โหมดการวางจำหน่ายจะรวบรวมแอปที่มีการเพิ่มประสิทธิภาพจำนวนมาก แต่ผู้ดีบักจะเกลียดการปรับให้เหมาะสมดังนั้นในการดีบักแอปที่เชื่อถือได้คุณจะต้องเปลี่ยนเป็นโหมดการดีบักซึ่งจะช่วยลดการเพิ่มประสิทธิภาพและเพิ่มข้อมูลการดีบัก วิธีเปลี่ยนเป็นโหมดดีบั๊ก:

  • คลิกที่รูปแบบของคุณที่มุมบนซ้ายของ Xcode

คลิกที่รูปแบบของคุณที่มุมบนซ้ายของ Xcode

  • เลือก "แก้ไขโครงการ ... "

เลือก "แก้ไขโครงการ ... "

  • คลิกที่เมนู "สร้างการกำหนดค่า" และเปลี่ยนเป็นโหมดแก้ไขข้อบกพร่อง

คลิกที่เมนู "สร้างการกำหนดค่า"


8
ฉันใช้ดีบัก และเครื่องมือเพิ่มประสิทธิภาพแน่ใจว่าปิดอยู่
Mojtaba

มันน่าสนใจ นอกจากนี้ยังเพราะผมมีมันติดตั้งที่จะวางจำหน่ายโหมดบางส่วนของจุดพักของฉันไม่ได้รับการตีขณะที่บางคนได้รับการตี _ (ツ) _ / ¯
น้ำผึ้ง

60

คำเตือนนี้จะปรากฏเฉพาะเมื่อคุณกดเบรกพอยต์และแหล่งที่มาอยู่ในโครงการที่เปิดใช้งานการเพิ่มประสิทธิภาพป้องกันไม่ให้คุณดูค่าตัวแปรจริง (ทุกวัตถุจะแสดงเป็นศูนย์แม้ว่าจะไม่ใช่)

ในกรณีของฉันมันเกิดขึ้นเฉพาะเมื่อทำการดีบั๊กทีละขั้นตอนผ่านการพึ่งพา cocoapod

ดังนั้นแม้ว่าคุณจะมีการตั้งค่าเป้าหมายหลักและการตั้งค่าโครงการอย่างถูกต้อง (Strip Debug Symbol = OFF และระดับการปรับให้เหมาะสมไม่มี) คุณต้องตรวจสอบให้แน่ใจว่ามันเป็นสิ่งเดียวกันสำหรับโครงการ Pod ที่คุณกดเบรกพอยต์

ป้อนคำอธิบายรูปภาพที่นี่


อ่านคำตอบอื่น ๆ พวกเขากำลังแนะนำเหมือนกัน แต่พวกเขาทั้งหมดออกไปในโครงการของฉัน (aka None [-O0])
Mojtaba

2
ฉันรู้ว่าคุณพูดว่ามันปิดใน projet ของคุณเช่นเดียวกับที่เป็นของฉัน แต่คุณดูที่การกำหนดค่าโครงการ Pod พึ่งพาของคุณหรือไม่
Gomino

ปัญหาเดียวกันกับ Xcode 7. ปัญหานี้อาจปรากฏขึ้นเมื่อฉันเริ่มใช้ไลบรารี trachkerbird แต่จุดพักอยู่ในรหัสของฉันเอง
Mike

1
สำหรับโครงการพ็อดเปลี่ยนการตั้งค่าระดับการปรับให้เหมาะสมที่สุด "PROJECT" เป็นไม่มีงาน (ไม่มีการเปลี่ยนแปลงสำหรับเป้าหมายพ็อดใด ๆ )
ooops

2
สิ่งนี้ไม่ถูกต้อง มันจะถูกแทนที่เมื่อคุณpod installอีกครั้ง เปลี่ยนเป็นเช่นนี้
Iulian Onofrei

13

ปรากฎว่าหลังจากนำเข้าโครงการเก่า (Xcode 7.x +) ไปยัง Xcode 8.3 ใหม่ (8E162) อาจเป็นเพราะการปรับให้เหมาะสมของคอมไพเลอร์, Swift Compiler - Optimization Optimizationถูกตั้งค่าเริ่มต้นเป็นFast, การปรับไฟล์เดียวให้เหมาะสม :

ก่อน

เปลี่ยนเป็นไม่มีแก้ไขปัญหา:

หลังจาก


ฉันทำมัน ไม่ได้ผลสำหรับฉัน ฉันกำลังเผชิญกับปัญหานี้ใน ios build ซึ่งเกิดจากความสามัคคี
Chandni

11

Editor-> Validate Settingsจากนั้นยืนยันการเปลี่ยนแปลงทั้งหมด จากนั้นคุณควรจะได้รับมีการเพิ่มประสิทธิภาพของ Swift Compiler Level

Noneชุดตรวจแก้จุดบกพร่องไป


1
ฉันทำมัน ไม่ได้ผลสำหรับฉัน ฉันกำลังเผชิญกับปัญหานี้ใน ios build ซึ่งเกิดจากความสามัคคี
Chandni

9

นี่คือทางออกสำหรับฉัน ...

ตามคำตอบของ gimino หากคุณใช้ cocoapods ให้เพิ่มบรรทัดแบบนี้ใน Podfile:

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

หรือสำหรับเวอร์ชัน cocoapods> = 1.0 (ขอบคุณ Diejmon)

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

ที่ MyProject มี 'Debug - local', 'Debug - staging', 'Debug - PRODUCTION' เป็นการกำหนดค่าการดีบักนอกเหนือจากมาตรฐาน 'Debug'

ตามค่าเริ่มต้น cocoapods มักจะสร้างการกำหนดค่าพ็อดเป็น Release สาย Podfile นี้ช่วยให้คุณสามารถบอกได้ว่าพวกมันกำลังดีบั๊กหรือไม่


9

ฉันพบปัญหาเดียวกันในวันนี้และคิดออก (อย่างน้อยก็ในกรณีของฉัน) ฉันใช้ CocoaPods ด้วยและฉันก็พบปัญหานี้เมื่อรันเป้าหมายทดสอบของฉัน (Swift มิกซ์กับ ObjC)

ฉันใช้ Xcode 7.2 กับ iOS 9.2 SDK

ในภาพด้านล่างคุณสามารถเห็นการเพิ่มประสิทธิภาพสำหรับเป้าหมายและโครงการก่อนการเปลี่ยนแปลงของฉัน:

ระดับการปรับให้เหมาะสมก่อนการเปลี่ยนแปลง

สิ่งที่น่าประหลาดใจก็คือแม้ว่าการเพิ่มประสิทธิภาพที่ได้รับการแก้ไขแล้วจะไม่มี [-O0]หลังจากเปลี่ยนการตั้งค่าโครงการจาก-Osเป็น-O0 เท่านั้นแล้วคอมไพเลอร์หยุดการปรับเป้าหมายให้เหมาะสม

ด้านล่างคุณสามารถดูการตั้งค่าสุดท้ายของฉัน:

ระดับการปรับให้เหมาะสมหลังการเปลี่ยนแปลง


7

เป็นเวลานาน แต่ในที่สุดฉันก็แก้ปัญหาได้ มีการตั้งค่าสถานะการเพิ่มประสิทธิภาพที่สามLTOหรือLink Time Optimizationและน่าแปลกใจที่ไม่มีใครพูดถึงที่นี่และด้วยเหตุผลบางอย่างที่ฉันไม่ได้ให้ความสนใจ มันอยู่ตรงนั้นเหนือOptimization Levelตั้งค่าอย่างที่คุณเห็นในภาพหน้าจอจำนวนมากที่โพสต์ไว้ที่นี่

ดังนั้นเพื่อสรุปว่ามีแฟลกการเพิ่มประสิทธิภาพที่แตกต่างกัน 3 ตัวที่คุณต้องการปิดสำหรับการดีบัก:

  • การเพิ่มประสิทธิภาพเวลาเชื่อมโยง LLVM ( -flto)
  • ระดับการเพิ่มประสิทธิภาพ LLVM ( -O)
  • Swift Compiler Optimization ระดับ

ป้อนคำอธิบายรูปภาพที่นี่

ข้อมูลเพิ่มเติมเกี่ยวกับ LTO: http://llvm.org/docs/LinkTimeOptimization.html


2
ฉันทำมัน ไม่ได้ผลสำหรับฉัน ฉันกำลังเผชิญกับปัญหานี้ใน ios build ซึ่งเกิดจากความสามัคคี
Chandni

@Chandni ที่นี่ฉันประสบปัญหาเดียวกันคุณหาวิธีแก้ไขหรือไม่
Ranjani

2

หากคุณจำเป็นต้องปิดการใช้งานสำหรับ optimisations ฝัก Swift Podfileคุณเพื่อให้คุณสามารถแก้ปัญหาในพวกเขาเพิ่มต่อไปนี้ของคุณ สิ่งนี้จะปิดใช้งานการเพิ่มประสิทธิภาพสำหรับการสร้างข้อบกพร่องเท่านั้น

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

คุณแน่ใจหรือว่าการกำหนดค่าการดีบักไม่ได้เพิ่มประสิทธิภาพโค้ด (ไม่ควร) ดูเหมือนว่าคุณได้เปิดใช้งานการปรับแต่งการดีบักโดยไม่ตั้งใจและคุณควรปิดการตั้งค่าของเป้าหมาย


3
การเพิ่มประสิทธิภาพถูกปิดสำหรับทุกสิ่ง แม้ปล่อยงานสร้างเพียงเพื่อให้แน่ใจ
Mojtaba

@ Mojtba แต่โหมดการเปิดใช้งานจะเปิดการเพิ่มประสิทธิภาพ!
NobodyNada

0

ข้อผิดพลาดนี้เกิดขึ้นกับฉันสองครั้งและในทุกกรณีเป็นความผิดพลาดในพารามิเตอร์ URL ที่ใช้ในการขอบริการ ในกรณีหนึ่ง URL มีพื้นที่บางส่วนในส่วนพอร์ตในกรณีอื่นค่าบางอย่างไม่ได้เปิดใช้งาน

ดังนั้นการแก้ไขคือต้องแน่ใจว่า URL สำหรับคำขอนั้นมีรูปแบบที่ดี ข้อมูลเพิ่มเติมเกี่ยวกับกรณีของฉันและคล้ายรายงานเดียวกันที่นี่


0

ทั้งหมดที่ฉันทำคือการล้าง ( Product > Clean) โครงการของฉันและเรียกใช้อีกครั้ง


0

นี่อาจเป็นการใช้งานเกินจริง แต่คุณกำลังสร้างเพื่อวางจำหน่ายหรือด้วยการเพิ่มประสิทธิภาพ (ซึ่งลบสัญลักษณ์จาก Swift หรือ LLVM) สูงเกินไปหรือไม่ ถ้าเป็นเช่นนั้นแก้ไขรูปแบบของคุณและเปลี่ยนเป็นดีบั๊กหรือแก้ไขการตั้งค่าการสร้างของคุณเพื่อการปรับให้รวดเร็วหรือ LLVM ให้เป็นไม่มี (0)


0

ในกรณีที่มีใครบางคนกำลังเผชิญกับปัญหานี้ในขณะที่ทำการดีบั๊กที่ใช้ไลบรารี C ภายในมีสิ่งอื่นที่คุณต้องเปลี่ยนในการตั้งค่าโครงการเพื่อให้ทำงานได้นอกเหนือจากทุกอย่างที่ระบุไว้ในเธรด

ไปที่การตั้งค่าโครงการ Pod -> เป้าหมายการใช้ C ของคุณ -> การตั้งค่า Build -> Apple Clang - Custom Compiler Flags -> Flags C อื่น ๆ และลบ-O3ค่าสถานะที่ไปที่นั่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.