Re: GDB + Curses + Virtuelle Konsolen

From: Greg Lehey <grog(at)lemis.com>
Date: Mon, 18 Aug 1997 12:06:44 +0930

On Sun, Aug 17, 1997 at 12:18:59PM +0200, Joachim Jaeckel wrote:
> Hi,
>
> hat vielleicht schon einmal jemand versucht, ein curses-Programm
> (genauer gesagt ein ncurses-Programm) mit GDB zu debuggen und die
> Ein- und Ausgabe des Programms mit "tty /dev/ttyv2" auf ein
> virtuelles Terminal umzulenken?

Ja.

> Bei mir erscheint zwar die Ausgabe auf dem Terminal, aber anscheinend
> ist das Terminal nicht in den cbreak-mode etc gesetzt worden.

Interessant. So ein Problem hatte ich nicht. Allerdings habe ich
meist kein vt benutzt, sondern ein xterm. Das Umschalten zwischen den
vts habe ich mit Xenix (kein X11) benutzen müssen--ich finde es
fürchterlich, habe aber nicht die Probleme, die Du beschreibst.

> Und saemtliche Eingaben auf dem virtuellen Term des Programmes werden
> ausserdem auch zusaetzlich an die Shell des Terminals weitergeleitet.

Ah! Daran liegt das Problem. Natürlich darf kein Shell auf dem
Terminal sein--das ist es, was wohl die Parameter falsch setzt.

> Hat dazu jemand vielleicht eine Idee, wie man das debuggen unter
> diesen Umstaenden etwas komfortabler gestalten kann, oder was ich
> vielleicht noch falsch mache?

Einfach: Disable mal das Terminal in /etc/ttys, oder sprich eins an,
das noch nicht enabled ist. Ich glaube, dann werden die
Terminalparameter in Ordnung sein, aber wenn nicht, so kannst Du es
mit stty zurechtstellen.

Mit X11 geht das alles *viel* einfacher. Da habe ich allerdings
feststellen müssen, daß der xterm loopt, wenn er ein "shell" wie sleep
bekommt. Letztens habe ich ein Programm "hang" geschrieben, das dem
xterm als "shell" dient:

/* hang: just hold on to an xterm
 * $Id: hang.c,v 2.1 1994/02/17 11:29:00 grog Exp $ */
main ()
{
  close (0);
  close (1);
  close (2);
  while (1)
    sleep (30000);
  }

Den xterm starte ich folgendermaßen:

  $ xterm -e hang &

Dann starte ich das gdb in einem anderen Fenster und starte das zu
testende Programm mit Redirektionen:

  (gdb) r </dev/ttyp7 >/dev/ttyp7

Eine dritte Möglichkeit, die mir Wes Peters vor kurzem beschrieben
hat, liegt darin, ein attach zu machen. Dann startest Du das Programm
wie üblich, und von einem anderen Fenster/Terminal startest Du gdb und
gibst ein:

  (gdb) attach <pid>

Das habe ich gerade ausprobiert--es scheint zu funktionieren.

Greg
Received on Mon 18 Aug 1997 - 04:37:37 CEST

search this site