İşte bir öncekinden daha zarif olmayan bir çözüm daha, ancak istisna kesme noktaları veya işleyicileri eklemediyseniz, gitmek için sadece bir yol olabilir.
Uygulama çöktüğünde ve ham ilk çağrı çağrı yığınınızı (onaltılık sayılarla) aldığınızda , Xcode konsoluna yazın info line *hex
(yıldız ve 0x
onaltılı belirteci unutmayın ), örneğin:
(gdb) info line *0x2658
Line 15 of "path/to/file/main.m" starts at address 0x25f2 <main+50>
and ends at 0x267e <main+190>.
Eğer lldb kullanıyorsanız , yazabilirsiniz image lookup -a hex
(bu durumda yıldız olmadan) ve benzer çıktı elde edersiniz.
Bu yöntemle, atma yığınının üstünden (yaklaşık 5-7 sistem istisna propagandası olacak) bir çökmeye neden olan işlevinize geçebilir ve tam dosya ve kod satırını belirleyebilirsiniz.
Ayrıca, benzer etki için terminalde atos yardımcı programını kullanabilirsiniz, sadece şunu yazın:
atos -o path/to/AplicationBundle.app/Executable 0xAdress1 0xAdress2 0xAdress3 ...
ve sembolik yığın izlemesi elde edersiniz (en azından hata ayıklama sembolleriniz olan işlevler için). Bu yöntem daha çok tercih edilir, çünkü her adres çağrısı için sahip değilseniz info line
, adresleri konsol çıkışından kopyalayın ve terminale yapıştırın.