Blad w bytecode

Blad w bytecode
MB
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 9 lat
  • Postów:45
0

Czy majac jakis dowolny bytecode z JVM mozna jakos okreslic czy znajduja sie w nim bledy ?
Ewentualnie da sie go jakos zdekompilować ?

Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:22 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
0

zdekompilować można bardzo prosto > https://www.google.com/search?q=java+decompiler

Co rozumiesz przez pojęcie "błędy". Bytecode jeżeli był tworzony przez kompilator jest zapewne OK (pomijam błędy w transmisji w sieci, uszkodzenia plików itp.). Błędy biznesowe? Trzeba napisać testy.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
MB
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 9 lat
  • Postów:45
0

Hm, nigdzie nie moge znaleźć opisu od tej technicznej strony.

Jeżeli to herezje to z góry przepraszam:
Mamy kod w zwyklym pliku .java. Kompilowany jest do pliku .class to oczywiste. Kod "javovy" zamieniany jest na bytecode przez JVM i dopiero on jest kompilowany na kod maszynowy ?

Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:22 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
0

Inaczej plik java trafia do kompilatora javac, który zmienia go na plik .class czyli bytecode. Tenże jest interpretowany przez maszynę wirtualną, która traktuje go jako swój własny kod maszynowy. By całość była wydajna mamy jeszcze takie coś jak JIT czyli dodatkowy kompilator, który działa w czasie pracy JVM i zamienia najczęściej wykonywane fragmenty kodu na kod maszynowy dla danego zestawu system+procek.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
MB
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 9 lat
  • Postów:45
0

A w którym momencie łapane są błędy ? Znaczy logiczne że w trakcie tworzenia bytecodu - pliku .class przez javac ale jak to się odbywa ? Tworzony jest po kroku bytecode i jeżeli jest błąd to error ?

Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:22 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
0

Zdefiniuj błąd. Jeśli chodzi o błędy składniowe to tak. W czasie kompilacji parser sprawdza poprawność składniową kodu, a następnie odbywa się jeszcze analiza semantyczna, która służy do weryfikacji np. poprawności typów. Jeśli chodzi o błędy "w logice" to zazwyczaj pisze się testy, które weryfikują poprawność napisanego kodu uruchamiając go z przykłaowymi danymi.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
MB
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 9 lat
  • Postów:45
0

Mialem coś takiego na myśli: http://stackoverflow.com/questions/16947679/bytecode-compilation-errors jest podany bytecode i czy analizując go można zauważyć błąd - czy jest jakos zapisywany.

Dziękie wielkie za odpowiedzi.

Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:22 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
0

Jak potrafisz czytać bytecode to zapewne wyłapiesz. Zaręczam jednak, że to działa w każdym przypadku i języku, bo albo znasz i wyłapiesz albo nie znasz.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.