2009-08-17 9 views
6

Kiedy symbolizuję raporty o awariach, zauważyłem, że numery linii są wyłączone. Testowałem to z projektem, w którym celowo spowodowałem awarię. Wydaje się, że wygenerowany numer wiersza nie zawiera niektórych wierszy, np. linie komentarza lub instrukcje preprocesora kompilatora (nie wiesz, co robi i nie zawiera) ...Jak uzyskać prawidłowe numery linii w symbolicznych raportach o awariach (iPhone/Mac)?

Czy istnieje łatwy sposób, aby uzyskać numer linii "wyłączony" w symbolicznym raporcie o awarii do faktycznego wiersza kodu w źródło?

Edit: Przykładem linii w symbolicated raportu katastrofy:

7 Luisterpaal 0x00005de2 -[SWFMP3 connection:didReceiveData:] (SWFMP3.m:320) 

Tak, numer linii 320 jest prawie poprawne, ale nie do końca. To kilka linii od ...

Odpowiedz

6

Jednym słowem ... nie. Jeśli szukasz na linii jak to w raporcie katastrofy:

0 com.apple.CoreFoundation 0x95cb046b CFArrayAppendValue + 43

W "+43" nie jest numer linii, ale lokalizacja pamięci od początku funkcji. Kod, jaki napisałeś, po prostu nie istnieje w skompilowanym pliku binarnym - kompilator optymalizuje i zmienia kod (przynajmniej w wersji Release), więc najczęściej nie pasuje do tego, co napisałeś.

Niestety, rozwiązaniem jest dostarczenie osobie, która ma awarię, wersji debugowania, która umożliwia zdalne debugowanie lub co najmniej wyrzucanie instrukcji NSLog() w celu śledzenia go i/lub pisania mniejszych metod.

+2

Wzwyższono dla "pisać mniejsze metody" :) – rpetrich

+0

Miałem na myśli numery symbolicznego dziennika awarii, np. "320" w: 7 Luisterpaal 0x00005de2 - [Połączenie SWFMP3: didReceiveData:] (SWFMP3.m: 320) –

3

Ten Technical Note pokazuje, jak odnosić się do raportu kodu

+0

Nie udało mi się uzyskać dokładniejszych numerów linii, ale jest to zasób killer do zakładki. – ckhan

0

miałem ten problem też, ale tylko dlatego, że szukałem w nowszej wersji kodu niż to, co zostało skompilowane do binarnego, który rozbił. Kiedy wróciłem do mojej historii źródłowej i znalazłem odpowiednią wersję źródła, numery linii dokładnie się zgadzały.

Powiązane problemy