The invention is a method for debugging a machine code of a program that
has been subjected to an optimizing action, wherein the machine code may
have been reordered, duplicated, eliminated or transformed so as not to
correspond with the program's source code order. The method derives a
table which associates each machine code instruction with a source
construct for which it was generated. The user sets a breakpoint at a
breakpoint P in the source code where execution is to stop. Then the
method determines at least one corresponding location for the breakpoint
in the machine code through use of the table, and executes, by native
execution or emulation, only machine code instructions which correspond to
source constructs that precede the breakpoint in the source code order.
The method further enables a comparison of the results of two passes of
emulation (in different orders) to detect a class of bugs that are
particularly hard to find: bugs caused by optimizer errors and user bugs
that manifest themselves only in the optimized executable.
De uitvinding is een methode om een machinecode van een programma te zuiveren dat aan een optimaliserende actie is onderworpen, waarin de machinecode kan weer in orde gebracht te zijn, zo zo gedupliceerd, geëlimineerd of omgezet niet om met de van het bron programma te corresponderen codeorde. De methode leidt een lijst af die elke instructie van de machinecode met een bronconcept associëert waarvoor het werd geproduceerd. De gebruiker plaatst een breekpunt bij een breekpunt P in de broncode waar de uitvoering moet ophouden. Dan bepaalt de methode minstens één overeenkomstige plaats voor het breekpunt in de machinecode door gebruik van de lijst, en voert, door inheemse uitvoering of wedijver, slechts de instructies van de machinecode die uit aan bronconcepten beantwoorden die het breekpunt in de broncodeorde voorafgaan. De methode laat verder een vergelijking van de resultaten van twee passen van wedijver (in verschillende orden) toe om een klasse van insecten te ontdekken die bijzonder moeilijk zijn te vinden: insecten die door optimizer fouten en gebruikersinsecten worden veroorzaakt die slechts in geoptimaliseerde uitvoerbaar tot uiting komen.