1

2 つの xterm ウィンドウを使用してコンソール Linux アプリケーションをデバッグしたいと考えています。

私が今行っているのは、2 番目の xterm ウィンドウで 'tty && sleep 1024d' を実行し (これにより疑似 tty 名が得られます)、gdb で 'tty ' を実行して、プログラムを別の xterm ウィンドウにリダイレクトします。ただし、GDB は、制御端末を設定できず、特定のマイナーな機能 (ウィンドウのサイズ変更の処理など) が機能しないことを警告します。これは、その xterm ウィンドウで「sleep 1024d」がまだ実行されているためです。

それを行うためのより良い方法はありますか (シェルからプロセスを起動して gdb からアタッチするのではなく)?

4

1 に答える 1

2

関連するバグで指定されたプログラムを変更して、ファイル名をhttp://sourceware.org/bugzilla/show_bug.cgi?id=11403のどこかに保存しました。

これを使用した例を次に示します。

$ xterm -e'./disowntty〜/tty.tmp'&sleep 1 && gdb --tty $(cat〜/ tty.tmp)/ usr / bin /links

/* tty;exec disowntty  */
#include <sys/ioctl.h>
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#include <signal.h>
static void
end (const char *msg)
{
  perror (msg);
  for (;;)
    pause ();
}
int
main (int argc, const char *argv[])
{
  FILE *tty_name_file;
  const char *tty_filename;

  if (argc <= 1)
    return 1;
  else
    tty_filename = argv[1];

  void (*orig) (int signo);
  setbuf (stdout, NULL);
  orig = signal (SIGHUP, SIG_IGN);
  if (orig != SIG_DFL)
    end ("signal (SIGHUP)");
  /* Verify we are the sole owner of the tty.  */
  if (ioctl (STDIN_FILENO, TIOCSCTTY, 0) != 0)
    end ("TIOCSCTTY");
  printf("%s %s\n", tty_filename, ttyname(STDIN_FILENO));
  tty_name_file = fopen(tty_filename, "w");
  fprintf(tty_name_file, "%s\n", ttyname(STDIN_FILENO));
  fclose(tty_name_file);

  /* Disown the tty.  */
  if (ioctl (STDIN_FILENO, TIOCNOTTY) != 0)
    end ("TIOCNOTTY");
  end ("OK, disowned");

  return 1;
}
于 2013-01-11T16:17:53.010 に答える