A method of back-tracing execution of a computer program, where the
computer program comprises a plurality of blocks, comprises instrumenting
an original version of the program by adding instrumentation code to some
or all of the blocks to form an instrumented program. Instrumentation can
be added at the binary or source level, or at link time. The
instrumentation code records execution sequence information upon execution
of the corresponding instrumented block to create a trace record of the
executed program. The execution sequence information for each block
comprises a block identifier which identifies the corresponding block. A
detailed back-trace is generated, after the program has executed, by
replacing each recorded block identifier with program counters associated
with each instruction in the corresponding block. The application may
comprise several programs or subprograms, in which case separate regions
of memory can be maintained. Each region is associated with a program or
subprogram or a set of programs or subprograms and stores therein part of
the trace record corresponding to the associated set of programs or
subprograms. The trace records themselves may be of different types. After
execution, the trace record is presented to a user, in the form of
assembly code, or more preferably, in the form of source level code. In an
alternative embodiment, a summary of the trace record recorded during
execution of an instrumented program is presented to a user. Various types
of traces can be produced, including a last instruction trace and a first
instruction trace.
Een methode achter-vindt uitvoering van een computerprogramma, waar het computerprogramma uit een meerderheid van blokken bestaat, bestaat uit het van instrumenten voorzien van een originele versie van het programma door instrumentatiecode aan wat of de elk van blokken toe te voegen om een van instrumenten voorzien programma te vormen. De instrumentatie kan op het binaire getal of het bronniveau, of in verbindingstijd worden toegevoegd. De instrumentatiecode registreert de informatie van de uitvoeringsopeenvolging op uitvoering van het overeenkomstige van instrumenten voorzien blok om tot een spoorverslag van het uitgevoerde programma te leiden. De informatie van de uitvoeringsopeenvolging voor elk blok bestaat uit een blokherkenningsteken dat het overeenkomstige blok identificeert. Een gedetailleerd achter-spoor wordt geproduceerd, nadat het programma heeft uitgevoerd, door elk geregistreerd blokherkenningsteken met programmatellers te vervangen verbonden aan elke instructie in het overeenkomstige blok. De toepassing kan uit verscheidene programma's of subprogramma's bestaan, waarbij de afzonderlijke gebieden van geheugen kunnen worden gehandhaafd. Elk gebied wordt geassocieerd met een programma of een subprogramma of een reeks programma's of subprogramma's en opslaat daarin een deel van het spoorverslag dat aan de bijbehorende reeks programma's of subprogramma's beantwoordt. De spoorverslagen zelf kunnen van verschillende types zijn. Na uitvoering, wordt het spoorverslag voorgelegd aan een gebruiker, in de vorm van assemblagecode, of liever, in de vorm van bronniveaucode. In een alternatieve belichaming, wordt een samenvatting van het spoorverslag dat tijdens uitvoering van een van instrumenten voorzien programma wordt geregistreerd voorgelegd aan een gebruiker. Diverse types van sporen kunnen, met inbegrip van een laatste instructiespoor en een eerste instructiespoor worden veroorzaakt.