ต่อไปนี้เป็นวิธีแก้ไขปัญหาเพิ่มเติมที่ไม่สวยงามอย่างที่เคยเป็นมาก่อน แต่ถ้าคุณไม่ได้เพิ่มเบรกพอยต์ยกเว้นหรือตัวจัดการมันอาจเป็นวิธีเดียวที่จะไป
เมื่อแอปขัดข้องและคุณได้รับสายการโทรซ้อนแรก (เป็นเลขฐานสิบหก) ให้พิมพ์ลงในคอนโซล Xcode info line *hex
(อย่าลืมตัว0x
ระบุดาวและฐานสิบหก) ตัวอย่างเช่น:
(gdb) info line *0x2658
Line 15 of "path/to/file/main.m" starts at address 0x25f2 <main+50>
and ends at 0x267e <main+190>.
หากคุณกำลังใช้lldbคุณสามารถพิมพ์image lookup -a hex
(โดยไม่ติดดาวในสถานการณ์นี้) และคุณจะได้ผลลัพธ์ที่คล้ายกัน
ด้วยวิธีนี้คุณสามารถข้ามจากด้านบนของสแต็กสโยน (จะมีผู้เผยแพร่ข้อยกเว้นระบบประมาณ 5-7) ไปยังฟังก์ชันของคุณซึ่งทำให้เกิดความผิดพลาดและกำหนดไฟล์และบรรทัดรหัสที่แน่นอน
นอกจากนี้สำหรับเอฟเฟกต์ที่คล้ายกันคุณสามารถใช้ยูทิลิตี้ atos ในเทอร์มินัลเพียงพิมพ์:
atos -o path/to/AplicationBundle.app/Executable 0xAdress1 0xAdress2 0xAdress3 ...
และคุณจะได้รับการติดตามสแต็กแบบมีสัญลักษณ์ (อย่างน้อยสำหรับฟังก์ชั่นที่คุณมีสัญลักษณ์ดีบัก) วิธีนี้เป็นวิธีที่ดีกว่าเพราะคุณไม่มีสำหรับการเรียก adress แต่ละครั้งinfo line
เพียงแค่คัดลอกที่อยู่จากคอนโซลเอาต์พุตและวางลงในเทอร์มินัล