Please take a look at this questionCo oznacza ".line" w smali składni kodu? (Kod Android maĹ,ych)
dekompilowana kod maĹ,ych zawiera takie rzeczy jak .line 3
lub .line 7
.
Nie mogę zrozumieć, co to jest .line
, proszę opracować sposób użycia.
Please take a look at this questionCo oznacza ".line" w smali składni kodu? (Kod Android maĹ,ych)
dekompilowana kod maĹ,ych zawiera takie rzeczy jak .line 3
lub .line 7
.
Nie mogę zrozumieć, co to jest .line
, proszę opracować sposób użycia.
.line n
znaczniki służą do debugowania i śledzenia stosów. Gdy wyjątek nie zostanie przerwany lub trzeba będzie wstawić stos, numer linii zostanie pobrany z instrukcji .line
. Jeśli tego nie ma, to w śladach stacktraces będzie brakować numerów linii.
Prawie wszystko w języku smali ma bezpośredni odpowiednik w formacie bajtów dalk lub dalx.
W szczególności dyrektywa .line odpowiada pozycjom pozycji emitowanych przez automat stanów, które definiuje pojęcie debug_info_item, jak określono w http://s.android.com/tech/dalvik/dex-format.html.
Czy mogę usunąć markery liniowe, gdy chcę rekompilować kody smali? –
@ user2525702 Zgodnie z tym, co już powiedziałem, tak, ale debugowanie będzie trudniejsze. – hexafraction
@ user2525702 '.line' jest linią w oryginalnym kodzie źródłowym Java, która tłumaczy się na następną część smali. Jeśli je usuniesz, prawdopodobnie nie dostaniesz ładnych tropów wyjątków, takich jak 'at com.foo.bar.Bar (Bar.java:85)' – zapl