Keine Debug-Möglichkeiten bei C oder C++ für qemu - breakpoints werden ignoriert



  • Da ich beim Debuggen des Kernels eine Symboltabelle nutzen will, um den Code im Zustand einer höheren Programmiersprache anzusehen, will ich auch bei qemu oder bochs den Gnu-Debugger gdb einsetzen.
    Die Schwierigkeit bei qemu jedoch ist, daß gesetzte breakpoints offenbar ignoriert werden und das Programm ohne Unterbrechung zu laufen beginnt. Sprich: das Debuggen funktioniert nicht! Gibt es eine Möglichkeit, mit Hilfe von Assembleranweisungen einen breakpoint zu setzen (Z.B hlt-Befehl o.ä.), wo vorübergehend der Prozeß angehalten wird?
    Ich benutze auch bochs, jedoch unterstützt meine Version wahrscheinlich nicht die Unterstützung von gdb.
    So habe ich momentan keine Möglichkeit, den Kernelcode mit Hilfe von Symboltabellen den Code in einer höheren Programmiersprache zu debuggen, außer daß der Code mit k_printf-Anweisungen ein paar Daten auf den Bildschirm ausgibt.



  • hlt würde die Ausführung unterbrechen, wenn man noch cli davor ausführt. Allerdings dauerhaft, das wäre nicht so richtig zweckmäßig. Klassischerweise wird Interrupt 0x03 für Breakpoints genutzt; probier das mal aus.



  • Ich habe es auch ausprobiert. Ich habe bereits den IDT eingerichtet als auch irq- und isr-Routinen. Wen ich im C++ Programm asm("int $3"); ausführe, dann springt er korrekt zur isr-Routine und gibt den Text "Haltepunkt" aus. bochs ignoriert diesen Haltepunkt, und qemu in Verbindung mit gdb rauscht ebenfalls durch. Selbst bei einen asm("wait");-Befehl geht er weiter.