Ini adalah satu solusi lagi, tidak seanggun sebelumnya, tetapi jika Anda tidak menambahkan breakpoint atau handler pengecualian, itu bisa menjadi satu-satunya cara.
Saat aplikasi mogok, dan Anda mendapatkan tumpukan panggilan lempar mentah pertama (dalam angka hex), ketikkan ke konsol Xcode info line *hex
(jangan lupa tanda bintang dan 0x
hex specifier), misalnya:
(gdb) info line *0x2658
Line 15 of "path/to/file/main.m" starts at address 0x25f2 <main+50>
and ends at 0x267e <main+190>.
Jika Anda menggunakan lldb , Anda dapat mengetik image lookup -a hex
(tanpa tanda bintang dalam situasi ini), dan Anda mendapatkan hasil yang serupa.
Dengan metode ini, Anda dapat melintasi dari atas tumpukan lemparan (akan ada sekitar 5-7 penyebar pengecualian sistem) ke fungsi Anda yang menyebabkan kerusakan, dan menentukan file dan baris kode yang tepat.
Juga, untuk efek serupa Anda dapat menggunakan utilitas atos di terminal, cukup ketik:
atos -o path/to/AplicationBundle.app/Executable 0xAdress1 0xAdress2 0xAdress3 ...
dan Anda mendapatkan jejak stack yang dilambangkan (setidaknya untuk fungsi Anda memiliki simbol debug). Metode ini lebih disukai, karena Anda tidak memiliki untuk setiap panggilan alamat info line
, cukup salin alamat dari output konsol dan tempelkan ke terminal.