Ich verwende GDB in Emacs 24 mit gdb-many-windows
auf t
, normalerweise in einem eigenen Frame. Ich habe gerne einen separaten Bearbeitungsrahmen. Es sieht so aus (Entschuldigung für mein einfaches ASCII-Diagramm):
Das funktioniert ziemlich gut, abgesehen von einem großen Problem. Wann immer gdb einen anderen Quellpuffer anzeigen muss, z. B. nach Auf / Ab / Schritt, wird es nicht immer im "Quell" -Fenster angezeigt. Wenn zum Beispiel der gleiche Puffer in einem Fenster in einem anderen Rahmen geöffnet ist, wird dieser Rahmen angehoben, während der Tastaturfokus im gdb-Rahmen bleibt. Dies ist wirklich ärgerlich bei einem Einzelmonitor-Setup, wenn sich die Bilder gegenseitig abdecken.
Ich möchte, dass gdb immer das Quellfenster im gdb-many-windows-Setup verwendet, um die Quelle anzuzeigen, egal ob der gleiche Quellpuffer an anderer Stelle angezeigt wird. Wie kann ich das tun?
BEARBEITEN: Weitere detaillierte Anweisungen zum Reproduzieren. Ich benutze Emacs 24.2.1 mit GDB 7.5-ubuntu. Ich habe dieses Problem auf Ubuntu 10.04 und Linux Mint Nadia mit Cinnamon gesehen.
(setq gdb-many-windows t)
Zum Beispiel:
%Vor%M-x 5 2
. Starten Sie in diesem Frame gdb mit M-x gdb
. Es sollte sechs Fenster in diesem Rahmen geben, wie oben gezeigt. Positioniere den gdb-Rahmen über dem Quellframe. main
und durchlaufen Sie Aufrufe von foo
und bar
. Wenn bar
aufgerufen wird, wird der Hauptrahmen über den gdb-Rahmen angehoben, da bar.c bereits dort sichtbar ist, aber der Tastaturfokus bleibt im gdb-Rahmen. Ich denke, die Problemfunktion ist gdb-display-source-buffer
in gud.el.gz. Ich habe vor, dies mit defadvice
zu umgehen, aber ich bin nicht wirklich mit Ratschlägen vertraut. Wenn ich es herausgefunden habe, werde ich hier eine Antwort posten.
Ich habe 24.3. Und ich kann das Problem mit dieser Version nicht reproduzieren.
Dort sieht gud-display-line
folgendermaßen aus:
Die Einstellung window
unterscheidet sich vollständig von Ihrer. Vielleicht ist der obige Code hilfreich oder vielleicht sollten Sie auf das neue gud / gdb-Zeug upgraden.
Die Funktion, die dieses Problem verursacht, ist tatsächlich gud-display-line
in gud.el.gz. Diese Funktion ist dafür verantwortlich, den Überlagerungspfeil im Quellfenster auf der aktuellen Zeile zu positionieren und sicherzustellen, dass er sichtbar ist. Hier ist die Logik:
Ich habe defadvice
verwendet, um die gesamte Funktion zu überschreiben; Im Grunde habe ich die Quelle kopiert und die Fensterauswahllogik geändert.
Offensichtlich nicht die eleganteste Lösung. Es hilft auch nicht beim Umschalten von Frames (mit hoch / runter / Frame), also werde ich das bearbeiten, wenn ich das herausgefunden habe.
Ich betreibe Emacs 24.5 und für mich ist das immer noch ein Problem. Ich verwalte meine Fenster jetzt manuell mit dedizierten Fenstern, hauptsächlich mit der folgenden Funktion:
%Vor%Dies zeigt das GUD-Fenster oben links, den IO-Puffer unten links und den Quellpuffer auf die rechte Seite. Der GUD und der IO-Puffer sind auf dediziert gesetzt.