Autor Thema: debug  (Gelesen 3267 mal)

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« am: 14. May 2006, 20:22 »
moin,
also jetzt bin ich soweit, das ich nen debugger einbauen kann :)
die frage ist nur, wie kann man ne debug function fürs system erstellen?

wie sollte die aussehen?
thetrue way is my way

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 14. May 2006, 22:11 »
gegenfrage was verstehst du unter debugfunktion?

so wie unter windows / Linux, das du mit nem debugger deine applikationen / ggf sogar den systemkern debuggen kanst? ( kernel debugging geht unter windows soweit ich weiss unter windows nur remote, bzw über die COM1)
Breakpints setzen, Speicher / Register anschauen, das ganze in verbindung mit quelltext?

oder sowas wie den debugview? in der die applikation ausgaben reinschreiben kann, die man dann anzeigen und mitloggen, filtern,... kann?

zu erstren. Breakpoints werden normalerweise so gelöst, das der quelltext an der zu haltenden stelle durch eine int ( oder eine andere anweisung ) ersetzt wird. Dadurch wird im prinzip ein Taskwechsel eingeleitet, der die zu debugende anwendung unterbricht und den debugger wieder startet. Register und speicherabbild sind vorhanden / wurden vorher gesichert und können dann betrachtet und ausgewertet werden.

das andere ist eigentlich nichts anderes als ein logging von ausgaben. Ob die jetzt vom Kernel oder irgendwelchen applikationen kommen ist da erstmal egal. Eine möglichkeit ist diese informationen z.B. auf com1 rauszuschreiben, so das du sie über nen Hypterterminal sehen kanst ( so was ähnliches wie die Statuskonsole unter linux wo wichtige infos ausgegeben werden ) hätte auch die möglichkeit, das du nen kleinen Terminal einbauen könntest, über die du z.B. Kernelinfos auslesen könntest wie z.B. Aktuelle laufende prozesse, Speicher verbrauch, ...
Genausogut könntest du die ausgaben auch in eine Datei schreiben oder auf dem Monitor ausgeben oder auf einer speziellen konsole.

gruss

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #2 am: 15. May 2006, 13:48 »
ahh, stimmt die int function hält ja an, also muss man im prinzip doch nur ein interrupt schreiben, der etwas ausgibt und auf irrgedn etwas wartet, wie F5, richitg?
thetrue way is my way

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 15. May 2006, 17:47 »
Debugging funktioniert -wenn ich mich recht entsinne- über den Int 2.

Im Gegensatz zu allen anderen Software-Interrupts hat der Int 2 nur einen 8-Bit-Opcode, statt 2 Bytes für die anderen.
Für einen Breakpoint müsstest du also nur an der entsprechenden Stelle in deinem Debugger den Programmcode deines zu debuggenden Programms durch "int 2" ersetzen (bzw. dessen Opcode).
In der Interruptroutine ersetzt du dann das int 2 wieder durch das, was da vorher mal stand (hast du ja erfolgreich gesichert :) ) und kannst die Register auswerten / ausgeben, wie auch immer.

NetBSD hat bspw. einen vollständigen In-Kernel-Debugger, der Kernel kann sich also zu 100% selbst debuggen. Linux hat glaube ich nur eine teilweise Debug-Funktionalität (über SysRQs).

Debugging über eine serielle Schnittstelle und ein (altes) Notebook ist recht praktikabel, finde ich. Mein Notebook überwacht z.Zt. meine 486er-Bastelkiste :) Für die will ich mal ein Linux hinkriegen mit NFS-Server.

Gruß,
Svenska (...wieder zuviel geschrieben)

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 15. May 2006, 18:49 »
Es ist der Int 3 ;) Der Opcode ist 0xCC.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 16. May 2006, 12:05 »
Na gut... hast ja recht :-)
Hab es ja auch nur ausm Gedächtnis geschrieben.

Gruß,
Svenska

 

Einloggen