2016-08-06 43 views
4

Wenn ich Dateien mit gdb -tui debuggen wird das Quellfenster immer vermasselt. Also habe ich jedes Mal getroffen eingeben muss ich sofort geben ctrl +L auf dieses Problem loszuwerden, das ist, wie gdb refeshes das Fenster. Ich arbeite an Tty mit Gnu-Bildschirm.Wie automatisch gdb im Tui-Modus zu aktualisieren?

Gibt es eine Möglichkeit, gdb im Tui-Modus automatisch zu aktualisieren?
Wenn gdb diese Fähigkeit nicht hat, könnte Python eine Lösung sein, weil gdb Python-Dateien erzeugen kann, aber ich weiß nichts über Python.

Dieses Python-Schnipsel funktioniert in Bash in Ordnung, aber nicht in gdb:

import sys 
r = "\033[2J" # here I try to emulate [ctrl-L] 
t = "" 
while 1: 
    i = sys.stdin.read(1) 
    t = t +i 
    if i == '\n': 
     print(r) 

Natürlich ich jede andere Sprache, die von GDB unterstützt akzeptieren.
Jede Hilfe wird geschätzt.

Übrigens, hier ist ein Screencast https://youtu.be/DqiH6Jym1JY, die mein Problem zeigen.

Dies ist die Datei, die ich in gdb zur Demonstration wie den obigen Link Show verwendet, von tic -V angezeigt

#include <stdio.h> 

int main(void){ 
    //int n = 120; 
    int n; 
    n = 120; 
    char stuff[n+2]; 

    printf("Max: %d\n", n); 

    printf("Sizeof int: %d\n", sizeof(int) ); 
    printf("Sizeof char: %d\n", sizeof(char)); 
    printf("Sizeof n: %d\n", sizeof n ); 
    printf("Sizeof stuff: %d\n", sizeof stuff ); 

    fgets (stuff , n , stdin); 
    printf("The stuff:\n%s\n", stuff); 
    printf("Sizeof stuff after input = %d\n", sizeof stuff ); 

return 0; 
} 

Meine eigentliche ncurses Version mess_up.c ncurses 5.9.20140118

+0

Bildschirm kann Ihr Problem sein. Persönlich finde ich, dass die Arbeit mit gdb von emacs über 'M-gdb' sehr gut funktioniert, da die Integration die Quelldateien in einem separaten Fenster behandelt, in dem du Befehle an gdb selbst gibst. – xxfelixxx

+0

Ich habe die gleichen Probleme, wenn ich nur auf tty ohne Bildschirm arbeite. Ich kann nicht glauben, dass gdb genau richtig mit emacs funktioniert –

+0

Einige Beispiele mit Bildern/Videos: http://tuhdo.github.io/c-ide.html – xxfelixxx

Antwort

0

genau das gleiche Problem hatte, ist. Haben Sie GDB-benutzerdefinierte Hooks oder Befehle ausprobiert?

In Ihrem ~/.gdbinit oder in Ihrer Sitzung können Sie tun:

define hook-next 
    refresh 
end 

Dies ruft den refresh Befehl jedes Mal, wenn Sie den Befehl next oder eines seiner Aliase eingeben.

Oder können Sie definieren:

define mynext 
    next 
    refresh 
end 

und rufen mynext statt next.

Hooks werden automatisch aufgerufen, wenn ein Befehl C eingegeben wird und ein Hook-C existiert, das ist so cool, das habe ich gerade in der Dokumentation entdeckt.

Siehe https://sourceware.org/gdb/current/onlinedocs/gdb/Define.html und https://sourceware.org/gdb/current/onlinedocs/gdb/Hooks.html#Hooks

können Sie fügen Sie so viele Haken/definiert, wie Sie wollen.