2016-08-06 3 views
4

Если я отлаживаю файлы с gdb -tui, исходное окно всегда становится испорченным. Поэтому каждый раз, когда я нажимаю , введите Мне нужно сразу ввести ctrl + L, чтобы избавиться от этой проблемы, вот как gdb заново закроет окно. Я работаю над tty с экраном gnu.Как автоматически обновлять gdb в режиме tui?

Есть ли возможность автоматического обновления gdb в режиме tui?
Если gdb не обладает этой способностью, Python может быть решением, потому что gdb способен создавать файлы Python, но я не знаю о Python.

Это Python фрагмент хорошо в Bash, но не работает в БГД:

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) 

Конечно, я принимаю любой другой язык, поддерживаемый GDB.
Каждая помощь приветствуется.

Кстати, вот скринкаст https://youtu.be/DqiH6Jym1JY, который показывает мою проблему.

Это файл, который я использовал для демонстрации в GDB, как по ссылке выше шоу, mess_up.c

#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; 
} 

Моей фактического Ncurses версии отображаемого tic -V является ncurses 5.9.20140118

+0

Экран может быть вашей проблемой. Лично я нахожу работу, что работа с gdb из emacs через 'M-gdb' работает очень хорошо, поскольку интеграция обрабатывает исходные файлы в отдельном окне, которое вы даете командам самому gdb. – xxfelixxx

+0

У меня такие же проблемы, если я работаю только на tty без экрана. Я не могу поверить, что gdb работает правильно с emacs. –

+0

Некоторые примеры с изображениями/видео: http://tuhdo.github.io/c-ide.html – xxfelixxx

ответ

0

Если бы точно такой же проблемы. Вы пробовали пользовательские крючки или команды GDB?

В файле ~/.gdbinit или в сеансе, вы можете сделать:

define hook-next 
    refresh 
end 

Это будет вызывать команду refresh каждый раз при входе в next команду или один из его псевдонимов.

Или вы можете определить:

define mynext 
    next 
    refresh 
end 

и вызвать mynext вместо next.

Крючки автоматически вызывается всякий раз, когда вводится команда C, и существует крючок-C, это так здорово, что я только что обнаружил это в документах.

См https://sourceware.org/gdb/current/onlinedocs/gdb/Define.html и https://sourceware.org/gdb/current/onlinedocs/gdb/Hooks.html#Hooks

Вы можете добавить столько крючков/определяет, как вы хотите.

Смежные вопросы