Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: middle_endian am 12. July 2007, 23:26
-
hi,
wenn ich unter linux versuche meinen bootloader+kernel mittels bochs zu laden und mich dann per gdb zu bochs connecte, hab ich weder die möglichkeit den code per single-step durchzugehn, noch break points zu setzen. das einzige, das funktioniert, ist das programm einfach komplett durchlaufen zu lassen.
hab versucht mittels nasm mittels -g zu sagen, dass er debuginformationen miterstellen soll. bringt aber auch nichts.
wenn ich mittels "s" in gdb versuche einen singlestep durchzuführen, bekomme ich die meldung "Cannot find bounds of current function". wenn ich versuche mittels "b 0x0000:0x7c00" einen breakpoint zu setzen, bekomm ich "No symbol table is loaded. use the "file" command".
woran kann das liegen?
danke
-
Öhm, ich würde mal stark bezweifeln, daß gdb mit 16-Bit-Code umgehen kann (deine Adresse sieht jedenfalls sehr danach aus, daß du das versuchst). Setz einen Breakpoint in deinen Kernel und laß dann erstmal weiterlaufen.
Ohne Debugsymbole kannst du übrigens nur si benutzen, das dann einen Assemblerbefehl abarbeitet. s soll ja eine Quellcodezeile abarbeiten, aber welche Befehle die umfaßt, ist ohne Debuginformationen nicht bekannt.
-
Setz einen Breakpoint in deinen Kernel und laß dann erstmal weiterlaufen.
und wie stell ich das an? hab versucht vor dem ersten befehl im kernel int 3 bzw 0xcc aufzurufen, aber das versetzt mich auch nicht in den debugger.
unter windows läuft das debugging mit bochs wunderbar. lieber wärs mir, wenns umgekehrt wär :)
-
hi,
ich hab mir dieses wochenende noch ein ganzes weilchen den kopf darüber zerbrochen, wie ich meinen code unter linux debuggen kann, aber da ich mit qemu/gdb bzw bochs/gdb einfach nicht weiterkomm(offenbar kann gdb mit dem 16bit code ohne debuginfos genau gar nichts anfangen) frag ich mich, wie ihr euren code unter linux debugged?
weiß außerdem vielleicht jemand was bochs unter windows intern für nen debugger verwendet? hab eigentlich angenehmen, dass gdb verwendet wird, aber da das debuggen unter windows funktioniert - es aber wenn ich den gdb unter windows mit bochs quasi standalone verwendet nicht funktioniert - hab ich diesen gedanken wieder verworfen.
-
aber da ich mit qemu/gdb bzw bochs/gdb einfach nicht weiterkomm(offenbar kann gdb mit dem 16bit code ohne debuginfos genau gar nichts anfangen) frag ich mich, wie ihr euren code unter linux debugged?
Daß gdb ohne Debuginfos mit dem 16-Bit-Code nichts anfangen kann, dürfte richtig sein. Genauso richtig dürfte es aber sein, daß gdb auch mit Debuginfos nichts mit 16-Bit-Code anfangen kann. ;)
Meine Lösung: Ich habe einfach keinen 16-Bit-Code. Es lebe GRUB.
-
sprich, wenn ich mich in den protected-mode einlese und diesen verwende, funktioniert das debuggen mittels gdb?
-
Jo, den realmode verwendet eh keiner mehr. Ist auch der letzte Schrott.
-
Jo, den realmode verwendet eh keiner mehr. Ist auch der letzte Schrott.
Stimmt so nicht. Ich habe mir ein Microcode-Update lieber als DOS Startdiskette geladen als als Windows Anwendung. Denn DOS traue ich bezüglich stabilität mehr zu als Windows. Und somit verwende ich, zwar selten aber immernoch manchmal den RealMode (bzw. DOS).
bitmaster
-
bitmaster das hat aber eher was damit zu tun, das DOS von Microsoft nur gekauft und nicht entwickelt wurde...
Nooooooooooos
-
bitmaster das hat aber eher was damit zu tun, das DOS von Microsoft nur gekauft und nicht entwickelt wurde...
Nooooooooooos
Nur dumm das DOS in der Version 6.X tausende von Quellcodezeilen hat und DOS 1 nur 4.000. Außerdem konnte die erste DOS Version nicht einmal mit Verzeichnissen/Festplatten usw. umgehen. Ich schätze das 90% Anteil von dem DOS-Quellcode von Microsoft stammen. Außerdem war das gar nicht das Thema.
bitmaster
-
Mein PC bootet übrigens auch im Realmode :-o :mrgreen: :roll:
-
Du solltest auf eine andere Architektur umsteigen. ;)
-
ok, hab jetzt einen mini 32bit assembler kernel, der von meinem bootloader geladen wird. debuggen geht aber immer noch nicht...
da ich in dieser hinsicht scheinbar dauernd mit dem kopf gegen die wand renne, würd mich einfach (etwas allgemeiner gesehn) interessiern, wie ihr euren kernel unter linux debugged(kein c, nur assembler code)?!
-
Ich nutze meistens den bochs debuger, bochs logs, disassemblies, stacktraces, "cli-hlt", printf/cout.
-
Ich nutze meistens den bochs debuger, bochs logs, disassemblies, stacktraces, "cli-hlt", printf/cout.
wie startest du unter linux diesen bochs-internen debugger?
edit: halleluja, nachdem ich bochs ein zweites mal mit den korrekten parametern kompiliert hab, funktioniert das debuggen jetzt endlich!
-
[...] funktioniert das debuggen jetzt endlich!
Der eingebaute debugger oder mit gdb?
-
der eingebaute. den ich fälschlicherweise als nicht vorhanden abgestempelt hab, und gdb dafür die schuld gegeben hab.