home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / td / helpme.doc next >
Encoding:
Text File  |  1988-08-28  |  11.4 KB  |  297 lines

  1. ALLGEMEINE FRAGEN UND ANTWORTEN ZUM TURBO DEBUGGER 1.0
  2. ------------------------------------------------------
  3.  
  4.   F. Wie verfährt TD mit der Bildschirmausgabe bei Grafik-und Text-
  5.      orientierten Programmen ?
  6.  
  7.   A. Der Turbo Debugger besitzt eine Reihe von Möglichkeiten,
  8.      um festzustellen, wann und wie es nötig ist, den Bildschirm
  9.      wiederherzustellen. Falls Sie Grafikprogramme debuggen oder
  10.      speicherresidente Programme wie SideKick Plus innerhalb des
  11.      Turbo Debuggers verwenden wollen, sollten Sie einige Hinweise
  12.      beachten.
  13.  
  14.      Die Voreinstellung bei der Bildschirm-Wiederherstellung ist "Flip",
  15.      was bedeutet, daß TD eine der alternativen Bildschirmseiten
  16.      der Grafikkarte benutzt. Dies hat den Vorteil, daß die Umschaltung
  17.      sehr schnell vonstatten geht, hat aber den Nachteil, daß es mit
  18.      manchen speicherresidenten Programmen und Grafikprogrammen Ärger
  19.      geben kann.
  20.  
  21.      Manche "Pop-up"-Programme erscheinen nicht am Bildschirm, obwohl
  22.      sie aktiv sind und auch Tastatureingaben annehmen.
  23.      In diesem Fall muß man die Option "Swap" verwenden.
  24.      Dazu kann man die Kommandozeilen-Option -ds verwenden oder die
  25.      entsprechende Einstellung mit TDINST vornehmen.
  26.      Ein Nachteil der "Swap"-Option ist die geringere Geschwindigkeit
  27.      beim Wiederherstellen des Bildschirms.
  28.  
  29.      Es kann sein, daß Sie die "Swap"-Option auch beim OS Shell-Befehl
  30.      benötigen oder wenn Sie einen Editor unter der Kontrolle des
  31.      Turbo Debuggers laufen lassen, da manche Programme davon ausgehen
  32.      das die aktuelle Bildschirmseite der Videokarte die Seite 0 ist.
  33.  
  34.      Falls Sie ein Grafikprogramm debuggen und deshalb die "Swap"-
  35.      Option angeben und außerdem die -vg - Option verwenden wollen
  36.      um die Bildschirmgrafik abzusichern, müssen Sie beachten, daß
  37.      dafür zusätzlicher Speicherplatz belegt wird. Wenn Sie diese
  38.      Option nicht benutzen, kann es sein, daß eine "rote Wolke" auf
  39.      dem Bildschirm erscheint. Diese Option kann auch mittels TDINST
  40.      als Voreinstellung gesetzt werden. Sie benötigt 8KByte an zu-
  41.      sätzlichen Speicherplatz.
  42.  
  43.      Falls Sie ein Programm laufen lassen wollen, das die EGA-Palette
  44.      verändert, stellen Sie sicher, daß Sie die Option -vp angegeben
  45.      haben, um die Palette abzusichern.
  46.  
  47.   F. Kann der Turbo Debugger andere Programme starten ?
  48.  
  49.   A. Mit dem OS Shell- oder Edit-Kommando kann ein anderes Programm
  50.      gestartet werden. Dabei lagert der Turbo Debugger das Programm,
  51.      das Sie gerade debuggen, oder einen Teil davon auf Diskette oder
  52.      Festplatte aus. Der voreingestellte Wert bei der Auslagerung auf
  53.      Platte ist 64 KByte. Dieser Wert kann mittels TDINST geändert
  54.      werden. Bei einer Einstellung von 0 KByte lagert der Turbo Debugger
  55.      das gesamte Programm auf Platte aus.
  56.  
  57.      Es wird nur das zu debuggende Programm ausgelagert, der Turbo
  58.      Debugger bleibt im Speicher.
  59.  
  60.   F. Wie kann ich ein Programm unterbrechen, obwohl Interrupts
  61.      abgeschaltet sind ?
  62.  
  63.   A. Falls Sie einen 80386-Rechner besitzen und TD386 verwenden,
  64.      erlaubt Ihnen die Option -B das Programm zu unterbrechen, auch
  65.      wenn Interrupts im Moment abgeschaltet sind.
  66.      Z.B. erlaubt diese Option auch folgende Stelle zu
  67.      unterbrechen:
  68.  
  69.        CLI
  70.        JMP $
  71.  
  72.   F. Warum kann ich ein Programm unter Remote Debugging nicht mit
  73.      CTRL-BREAK abbrechen ?
  74.  
  75.   A. Das Programm das auf dem Remote-Rechner läuft, übernimmt die
  76.      Kontrolle über den Interrupt 1B (Ctrl-Break), TDREMOTE
  77.      holt sich diese Kontrolle nicht zurück, bis die Ausführung
  78.      des Programms beendet wurde oder durch CTRL-F2 (Programm Reset)
  79.      unterbrochen wird.
  80.  
  81.   F. Welches sind die syntaktischen Unterschiede zwischen dem Turbo
  82.      Assembler und dem integrierten Assembler in TD ?
  83.  
  84.   A. Das folgende kurze Programm zeigt Unterschiede auf, die im
  85.      folgenden Text erklärt werden.
  86.  
  87.               .model small
  88.               .data
  89.  
  90.        abc    struc
  91.        mem1   dd      ?
  92.        mem2   db      ?
  93.        mem3   db      "   "
  94.        abc    ends
  95.  
  96.               align   16
  97.        a      abc     <1,2,"xyz">
  98.  
  99.        msg1   db      "testing 1 2 3", 0
  100.        msg2   db      "hello world", 0
  101.        nmptr  dw      msg1
  102.        fmptr  dd      msg1,msg2
  103.        nfmptr dw      fmptr
  104.        xx     dw      seg a
  105.  
  106.               .code
  107.  
  108.               push   cs
  109.               pop    ds
  110.               mov    bx,offset a
  111.               mov    bx,nmptr
  112.               les    si,fmptr
  113.               mov    ah,4ch
  114.               int    21h
  115.               end
  116.  
  117.      Der Parser des integrierten Assemblers akzeptiert nicht alle
  118.      gültigen TASM-Befehle und -Operanden.
  119.      Manche Anweisungen müssen anders angegeben werden, um
  120.      von TD's Assembler akzeptiert zu werden:
  121.  
  122.        a. Die Angabe der Operandengröße muß immer innerhalb
  123.           der Klammern angegeben werden. PTR ist optional. Wenn man
  124.           auf eine Struktur zugreift, muß man den Namen der Struktur
  125.           verwenden, nicht den Namen der Variable.
  126.  
  127.           RICHTIG:  [byte ptr bx]   [dword si]        [abc bx]
  128.  
  129.           FALSCH:   byte ptr[bx]    [struc abc bx]    [a bx]
  130.  
  131.        b. Sie müssen den Namen der Struktur angeben, falls Sie auf
  132.           eine Komponente mittels Register-Zeiger zugreifen wollen:
  133.  
  134.           RICHTIG:  [abc ptr bx].mem1  [abc bx].mem3 + 1
  135.  
  136.           FALSCH:   [bx].mem1
  137.  
  138.        c. Sie können nicht mehrere [] benutzen, wenn diese nicht direkt
  139.           aufeinanderfolgend sind. Einem []-Ausdruck kann nur ein weiterer
  140.           []-Ausdruck oder ein Punkt und ein Feldbezeichner folgen.
  141.  
  142.           RICHTIG:  4[bx][si]    [abc bx].mem2
  143.  
  144.           FALSCH:   [bx]4[si]    [bx]+4
  145.  
  146.        d. Falls Sie ein Register für einen Speicherzugriff verwenden,
  147.           bei dem Sie keine Größenangabe machen, wird der Typ WORD
  148.           verwendet.
  149.  
  150.             [bx] entspricht [word bx]
  151.  
  152.        e. Sie können innerhalb der [] jedes Register verwenden.
  153.  
  154.           RICHTIG:  [ax+bx]   [bx+sp]
  155.  
  156.        f. Sie können mehrere Ebenen von [] verwenden.
  157.  
  158.           RICHTIG:  [byte [[nfmptr]+4]]
  159.  
  160.        g. Seien Sie vorsichtig wenn Sie über ein Register auf den
  161.           Speicher zugreifen. Sie erhalten unvorhersehbare
  162.           Resultate, falls die Segmentregister nicht mit
  163.           den richtigen Werten geladen sind.
  164.  
  165.        h. Wenn Sie ein Segmentregister angeben, folgen Sie denselben
  166.           Regeln wie bei der Größenangabe, d.h. geben Sie das Segment-
  167.           register innerhalb der [] an.
  168.  
  169.           RICHTIG:  [byte es:di]    [es:fmptr]
  170.  
  171.           FALSCH:   es:[byte di]
  172.  
  173.        i. Verwenden Sie den OFFSET-Operator um die Adresse einer
  174.           Variable oder einer Struktur zu ermitteln.
  175.           Der Turbo Debugger ergänzt automatisch die [] , falls Sie
  176.           nur den Variablenbezeichner angegeben haben:
  177.  
  178.             a            Inhalt der Variable a
  179.             [a]          Inhalt der Variable a
  180.             offset a     Adresse der Variable a
  181.  
  182.        j. Sie können mit einer Typ-Angabe und einer Zahl bestimmen,
  183.           wie und auf wieviel Sie von einem Speicherbereich zugreifen:
  184.  
  185.             [byte es:bx],10  10 bytes auf die es:bx zeigt
  186.             [dword ds:si],4  4 dwords auf die ds:si zeigt
  187.  
  188.           Dies ist sehr nützlich im Zusammenhang mit Watch-Ausdrücken.
  189.  
  190.        k. Manchmal benutzt man eine WORD-Variable oder ein Register
  191.           um auf einen Speicherbereich zu zeigen, der eine Struktur
  192.           enthält. Greifen Sie auf die Struktur folgendermaßen zu:
  193.  
  194.             [abc [xx]:0].mem1
  195.             [abc es:0].mem3
  196.  
  197.   F. Gibt es syntaktische Unterschiede zwischen der Berechnung
  198.      von C-Ausdrücken innerhalb des Turbo Debuggers und Turbo C ?
  199.  
  200.   A. Sie können keine String-Konstanten als Parameter übergeben.
  201.  
  202.      RICHTIG:  myfunc(123)   myfunc(string_variable)
  203.  
  204.      FALSCH:   myfunc("constant")
  205.  
  206.   F. Gibt es syntaktische Unterschiede zwischen der Berechnung
  207.      von Pascal-Ausdrücken innerhalb des Turbo Debuggers
  208.      und Turbo Pascal ?
  209.  
  210.  
  211.   A. Die Unterschiede sind:
  212.  
  213.      a. Der Turbo Debugger unterstützt keine Mengen-Ausdrücke:
  214.  
  215.         RICHTIG:   [4..7]
  216.  
  217.         FALSCH:    [myvar1..myvar2]   [3+4..7+8]
  218.  
  219.      b. Sie können keine String-Konstanten als Parameter übergeben.
  220.  
  221.         RICHTIG:   MyFunc(123)   MyFunc(StringVariable)
  222.  
  223.         FALSCH:    MyFunc('Constant')
  224.  
  225.                    MyFunc(StringConstant), wenn StringConstant als
  226.                    Konstante (nicht typisiert!) deklariert wurde.
  227.  
  228.      c. Sie können keine Prozeduren und Funktionen auswerten, die
  229.         Strukturen als Werteparameter haben.
  230.  
  231.   F. Auf was sollte man aufpassen, wenn man Programme debuggt, die aus
  232.      verschiedenen Sprachen bestehen ?
  233.  
  234.   A. Turbo Debugger's Voreinstellung bei der Programmiersprache
  235.      ist "Auto", was bedeutet, daß die Sprache entsprechend dem
  236.      aktuellen Modul gewählt wird. Dies kann zu einigen Problemen
  237.      führen, wenn Sie Module haben, die verschiedene Sprachen
  238.      benutzen (z.B. C und Assembler):
  239.  
  240.      a. Obwohl Sie sich sich im CPU-Fenster befinden, müssen Sie
  241.         die Adressen in der entsprechenden Hochsprache eingeben.
  242.         Sie müssen zum Beispiel, falls Sie den Inhalt der Speicher-
  243.         stelle 1234:5678 ausgeben wollen, folgendes eingeben:
  244.  
  245.           C            0x1234:0x5678
  246.           Pascal        $1234:$5678
  247.           Assembler      1234:5678
  248.  
  249.      b. Wenn die aktuelle Sprache Assembler ist, müssen Sie
  250.         vorsichtig sein, bei  der Eingabe von hexadezimalen Zahlen.
  251.  
  252.         RICHTIG:    0aaaa   123dh   89abh
  253.  
  254.         FALSCH:     aaaa    123d    89ab
  255.  
  256.   F. Warum kommt die Meldung "Cannot be changed", wenn ich eine
  257.      Zuweisung im Data/Evaluate/Modify "New value"-Ausschnitt mache ?
  258.  
  259.   A. Wenn Sie den Data/Evaluate/Modify-Befehl (Ctrl-F4) benutzen
  260.      um eine Variable zu verändern, bedeutet die Meldung nicht, daß
  261.      die Eingabe wirkungslos war, sondern vielmehr, daß es sich bei
  262.      dem Ausdruck nicht um eine veränderbare Speicherstelle handelt.
  263.  
  264.        C              x = 4
  265.        Pascal         ratio := 1.234
  266.        Assembler      wval = 4 shl 2
  267.  
  268.      Falls Sie nur "x" ,"ratio" oder "wval" eingeben, können
  269.      Sie im untersten Ausschnitt auch diese Variablen verändern.
  270.  
  271.   F. Warum erscheinen beim Inspizieren von Turbo C-Register-
  272.      variablen gelegentlich Fragezeichen ?
  273.  
  274.   A. Wenn Sie eine Registervariable inspizieren, die nicht im aktuellen
  275.      Gültigkeitsbereich liegt, zeigt der TD nur Fragezeichen an.
  276.  
  277.   F. Welchen Grund kann es haben, wenn sich der Rechner auf einem
  278.      PC-kompatiblen Rechner aufhängt ?
  279.  
  280.   A. Falls Sie einen Tandy 1000A, IBM PC Convertible, oder
  281.      NEC MultiSpeed besitzen oder sich der Rechner aufhängt wenn Sie
  282.      TD starten, benutzen Sie TDINST und setzen im Options-Menü
  283.      NMI Intercept auf "No". Dies bewirkt, daß TD keinen Gebrauch
  284.      mehr vom NMI macht, weil dies bei einigen Rechnern zu Problemen
  285.      führt.
  286.  
  287.      Seien Sie auch vorsichtig, wenn Sie SuperKey geladen haben und
  288.      einen 80386-Rechner benutzen, da es beim Laden von TD386 zu
  289.      Problemen kommen kann, falls Sie eine Taste drücken.
  290.  
  291.   F. Warum bekomme ich die Meldung "Cannot run TD386: processor is
  292.      already in V8086 mode" ?
  293.  
  294.   A. Sie haben einen Device-Treiber oder ein Programm geladen, das den
  295.      80386 Virtual-8086-Modus (z.B. 386^MAX, CEMM, QEMM) benutzt.
  296.      Sie müssen diese Programme entweder deaktivieren oder deinstallieren.
  297.