home *** CD-ROM | disk | FTP | other *** search
- ALLGEMEINE FRAGEN UND ANTWORTEN ZUM TURBO DEBUGGER 1.0
- ------------------------------------------------------
-
- F. Wie verfährt TD mit der Bildschirmausgabe bei Grafik-und Text-
- orientierten Programmen ?
-
- A. Der Turbo Debugger besitzt eine Reihe von Möglichkeiten,
- um festzustellen, wann und wie es nötig ist, den Bildschirm
- wiederherzustellen. Falls Sie Grafikprogramme debuggen oder
- speicherresidente Programme wie SideKick Plus innerhalb des
- Turbo Debuggers verwenden wollen, sollten Sie einige Hinweise
- beachten.
-
- Die Voreinstellung bei der Bildschirm-Wiederherstellung ist "Flip",
- was bedeutet, daß TD eine der alternativen Bildschirmseiten
- der Grafikkarte benutzt. Dies hat den Vorteil, daß die Umschaltung
- sehr schnell vonstatten geht, hat aber den Nachteil, daß es mit
- manchen speicherresidenten Programmen und Grafikprogrammen Ärger
- geben kann.
-
- Manche "Pop-up"-Programme erscheinen nicht am Bildschirm, obwohl
- sie aktiv sind und auch Tastatureingaben annehmen.
- In diesem Fall muß man die Option "Swap" verwenden.
- Dazu kann man die Kommandozeilen-Option -ds verwenden oder die
- entsprechende Einstellung mit TDINST vornehmen.
- Ein Nachteil der "Swap"-Option ist die geringere Geschwindigkeit
- beim Wiederherstellen des Bildschirms.
-
- Es kann sein, daß Sie die "Swap"-Option auch beim OS Shell-Befehl
- benötigen oder wenn Sie einen Editor unter der Kontrolle des
- Turbo Debuggers laufen lassen, da manche Programme davon ausgehen
- das die aktuelle Bildschirmseite der Videokarte die Seite 0 ist.
-
- Falls Sie ein Grafikprogramm debuggen und deshalb die "Swap"-
- Option angeben und außerdem die -vg - Option verwenden wollen
- um die Bildschirmgrafik abzusichern, müssen Sie beachten, daß
- dafür zusätzlicher Speicherplatz belegt wird. Wenn Sie diese
- Option nicht benutzen, kann es sein, daß eine "rote Wolke" auf
- dem Bildschirm erscheint. Diese Option kann auch mittels TDINST
- als Voreinstellung gesetzt werden. Sie benötigt 8KByte an zu-
- sätzlichen Speicherplatz.
-
- Falls Sie ein Programm laufen lassen wollen, das die EGA-Palette
- verändert, stellen Sie sicher, daß Sie die Option -vp angegeben
- haben, um die Palette abzusichern.
-
- F. Kann der Turbo Debugger andere Programme starten ?
-
- A. Mit dem OS Shell- oder Edit-Kommando kann ein anderes Programm
- gestartet werden. Dabei lagert der Turbo Debugger das Programm,
- das Sie gerade debuggen, oder einen Teil davon auf Diskette oder
- Festplatte aus. Der voreingestellte Wert bei der Auslagerung auf
- Platte ist 64 KByte. Dieser Wert kann mittels TDINST geändert
- werden. Bei einer Einstellung von 0 KByte lagert der Turbo Debugger
- das gesamte Programm auf Platte aus.
-
- Es wird nur das zu debuggende Programm ausgelagert, der Turbo
- Debugger bleibt im Speicher.
-
- F. Wie kann ich ein Programm unterbrechen, obwohl Interrupts
- abgeschaltet sind ?
-
- A. Falls Sie einen 80386-Rechner besitzen und TD386 verwenden,
- erlaubt Ihnen die Option -B das Programm zu unterbrechen, auch
- wenn Interrupts im Moment abgeschaltet sind.
- Z.B. erlaubt diese Option auch folgende Stelle zu
- unterbrechen:
-
- CLI
- JMP $
-
- F. Warum kann ich ein Programm unter Remote Debugging nicht mit
- CTRL-BREAK abbrechen ?
-
- A. Das Programm das auf dem Remote-Rechner läuft, übernimmt die
- Kontrolle über den Interrupt 1B (Ctrl-Break), TDREMOTE
- holt sich diese Kontrolle nicht zurück, bis die Ausführung
- des Programms beendet wurde oder durch CTRL-F2 (Programm Reset)
- unterbrochen wird.
-
- F. Welches sind die syntaktischen Unterschiede zwischen dem Turbo
- Assembler und dem integrierten Assembler in TD ?
-
- A. Das folgende kurze Programm zeigt Unterschiede auf, die im
- folgenden Text erklärt werden.
-
- .model small
- .data
-
- abc struc
- mem1 dd ?
- mem2 db ?
- mem3 db " "
- abc ends
-
- align 16
- a abc <1,2,"xyz">
-
- msg1 db "testing 1 2 3", 0
- msg2 db "hello world", 0
- nmptr dw msg1
- fmptr dd msg1,msg2
- nfmptr dw fmptr
- xx dw seg a
-
- .code
-
- push cs
- pop ds
- mov bx,offset a
- mov bx,nmptr
- les si,fmptr
- mov ah,4ch
- int 21h
- end
-
- Der Parser des integrierten Assemblers akzeptiert nicht alle
- gültigen TASM-Befehle und -Operanden.
- Manche Anweisungen müssen anders angegeben werden, um
- von TD's Assembler akzeptiert zu werden:
-
- a. Die Angabe der Operandengröße muß immer innerhalb
- der Klammern angegeben werden. PTR ist optional. Wenn man
- auf eine Struktur zugreift, muß man den Namen der Struktur
- verwenden, nicht den Namen der Variable.
-
- RICHTIG: [byte ptr bx] [dword si] [abc bx]
-
- FALSCH: byte ptr[bx] [struc abc bx] [a bx]
-
- b. Sie müssen den Namen der Struktur angeben, falls Sie auf
- eine Komponente mittels Register-Zeiger zugreifen wollen:
-
- RICHTIG: [abc ptr bx].mem1 [abc bx].mem3 + 1
-
- FALSCH: [bx].mem1
-
- c. Sie können nicht mehrere [] benutzen, wenn diese nicht direkt
- aufeinanderfolgend sind. Einem []-Ausdruck kann nur ein weiterer
- []-Ausdruck oder ein Punkt und ein Feldbezeichner folgen.
-
- RICHTIG: 4[bx][si] [abc bx].mem2
-
- FALSCH: [bx]4[si] [bx]+4
-
- d. Falls Sie ein Register für einen Speicherzugriff verwenden,
- bei dem Sie keine Größenangabe machen, wird der Typ WORD
- verwendet.
-
- [bx] entspricht [word bx]
-
- e. Sie können innerhalb der [] jedes Register verwenden.
-
- RICHTIG: [ax+bx] [bx+sp]
-
- f. Sie können mehrere Ebenen von [] verwenden.
-
- RICHTIG: [byte [[nfmptr]+4]]
-
- g. Seien Sie vorsichtig wenn Sie über ein Register auf den
- Speicher zugreifen. Sie erhalten unvorhersehbare
- Resultate, falls die Segmentregister nicht mit
- den richtigen Werten geladen sind.
-
- h. Wenn Sie ein Segmentregister angeben, folgen Sie denselben
- Regeln wie bei der Größenangabe, d.h. geben Sie das Segment-
- register innerhalb der [] an.
-
- RICHTIG: [byte es:di] [es:fmptr]
-
- FALSCH: es:[byte di]
-
- i. Verwenden Sie den OFFSET-Operator um die Adresse einer
- Variable oder einer Struktur zu ermitteln.
- Der Turbo Debugger ergänzt automatisch die [] , falls Sie
- nur den Variablenbezeichner angegeben haben:
-
- a Inhalt der Variable a
- [a] Inhalt der Variable a
- offset a Adresse der Variable a
-
- j. Sie können mit einer Typ-Angabe und einer Zahl bestimmen,
- wie und auf wieviel Sie von einem Speicherbereich zugreifen:
-
- [byte es:bx],10 10 bytes auf die es:bx zeigt
- [dword ds:si],4 4 dwords auf die ds:si zeigt
-
- Dies ist sehr nützlich im Zusammenhang mit Watch-Ausdrücken.
-
- k. Manchmal benutzt man eine WORD-Variable oder ein Register
- um auf einen Speicherbereich zu zeigen, der eine Struktur
- enthält. Greifen Sie auf die Struktur folgendermaßen zu:
-
- [abc [xx]:0].mem1
- [abc es:0].mem3
-
- F. Gibt es syntaktische Unterschiede zwischen der Berechnung
- von C-Ausdrücken innerhalb des Turbo Debuggers und Turbo C ?
-
- A. Sie können keine String-Konstanten als Parameter übergeben.
-
- RICHTIG: myfunc(123) myfunc(string_variable)
-
- FALSCH: myfunc("constant")
-
- F. Gibt es syntaktische Unterschiede zwischen der Berechnung
- von Pascal-Ausdrücken innerhalb des Turbo Debuggers
- und Turbo Pascal ?
-
-
- A. Die Unterschiede sind:
-
- a. Der Turbo Debugger unterstützt keine Mengen-Ausdrücke:
-
- RICHTIG: [4..7]
-
- FALSCH: [myvar1..myvar2] [3+4..7+8]
-
- b. Sie können keine String-Konstanten als Parameter übergeben.
-
- RICHTIG: MyFunc(123) MyFunc(StringVariable)
-
- FALSCH: MyFunc('Constant')
-
- MyFunc(StringConstant), wenn StringConstant als
- Konstante (nicht typisiert!) deklariert wurde.
-
- c. Sie können keine Prozeduren und Funktionen auswerten, die
- Strukturen als Werteparameter haben.
-
- F. Auf was sollte man aufpassen, wenn man Programme debuggt, die aus
- verschiedenen Sprachen bestehen ?
-
- A. Turbo Debugger's Voreinstellung bei der Programmiersprache
- ist "Auto", was bedeutet, daß die Sprache entsprechend dem
- aktuellen Modul gewählt wird. Dies kann zu einigen Problemen
- führen, wenn Sie Module haben, die verschiedene Sprachen
- benutzen (z.B. C und Assembler):
-
- a. Obwohl Sie sich sich im CPU-Fenster befinden, müssen Sie
- die Adressen in der entsprechenden Hochsprache eingeben.
- Sie müssen zum Beispiel, falls Sie den Inhalt der Speicher-
- stelle 1234:5678 ausgeben wollen, folgendes eingeben:
-
- C 0x1234:0x5678
- Pascal $1234:$5678
- Assembler 1234:5678
-
- b. Wenn die aktuelle Sprache Assembler ist, müssen Sie
- vorsichtig sein, bei der Eingabe von hexadezimalen Zahlen.
-
- RICHTIG: 0aaaa 123dh 89abh
-
- FALSCH: aaaa 123d 89ab
-
- F. Warum kommt die Meldung "Cannot be changed", wenn ich eine
- Zuweisung im Data/Evaluate/Modify "New value"-Ausschnitt mache ?
-
- A. Wenn Sie den Data/Evaluate/Modify-Befehl (Ctrl-F4) benutzen
- um eine Variable zu verändern, bedeutet die Meldung nicht, daß
- die Eingabe wirkungslos war, sondern vielmehr, daß es sich bei
- dem Ausdruck nicht um eine veränderbare Speicherstelle handelt.
-
- C x = 4
- Pascal ratio := 1.234
- Assembler wval = 4 shl 2
-
- Falls Sie nur "x" ,"ratio" oder "wval" eingeben, können
- Sie im untersten Ausschnitt auch diese Variablen verändern.
-
- F. Warum erscheinen beim Inspizieren von Turbo C-Register-
- variablen gelegentlich Fragezeichen ?
-
- A. Wenn Sie eine Registervariable inspizieren, die nicht im aktuellen
- Gültigkeitsbereich liegt, zeigt der TD nur Fragezeichen an.
-
- F. Welchen Grund kann es haben, wenn sich der Rechner auf einem
- PC-kompatiblen Rechner aufhängt ?
-
- A. Falls Sie einen Tandy 1000A, IBM PC Convertible, oder
- NEC MultiSpeed besitzen oder sich der Rechner aufhängt wenn Sie
- TD starten, benutzen Sie TDINST und setzen im Options-Menü
- NMI Intercept auf "No". Dies bewirkt, daß TD keinen Gebrauch
- mehr vom NMI macht, weil dies bei einigen Rechnern zu Problemen
- führt.
-
- Seien Sie auch vorsichtig, wenn Sie SuperKey geladen haben und
- einen 80386-Rechner benutzen, da es beim Laden von TD386 zu
- Problemen kommen kann, falls Sie eine Taste drücken.
-
- F. Warum bekomme ich die Meldung "Cannot run TD386: processor is
- already in V8086 mode" ?
-
- A. Sie haben einen Device-Treiber oder ein Programm geladen, das den
- 80386 Virtual-8086-Modus (z.B. 386^MAX, CEMM, QEMM) benutzt.
- Sie müssen diese Programme entweder deaktivieren oder deinstallieren.