web-dev-qa-db-ja.com

tuiモードでgdbを自動的に更新する方法は?

gdb -tuiを使用してファイルをデバッグしている場合、ソースウィンドウは常に混乱します。だから私がヒットするたびに enter すぐに入力する必要があります ctrl+L この問題を取り除くために、これはgdbがウィンドウを再更新する方法です。私はgnuscreenでttyに取り組んでいます。

Tuiモードでgdbを自動的に更新する可能性はありますか?
gdbにこの機能がない場合Python gdbはPythonファイルをソースできるので、解決策になる可能性がありますが、私はしませんPythonについて知っています。

このPythonスニペットはBashで正常に機能しますが、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)

もちろん、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;
}

tic -Vで表示される実際のncursesバージョンはncurses 5.9.20140118です。

14
John Goofy

まったく同じ問題がありました。 GDBのユーザー定義のフックまたはコマンドを試しましたか?

〜/ .gdbinitまたはセッションで、次のことができます。

define hook-next
  refresh
end

これにより、refreshコマンドまたはそのエイリアスの1つを入力するたびに、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

必要な数のフック/定義を追加できます。

7
hdl

部分的に関連:これを〜/ .gdbinitに配置すると、cnを使用した後、TUIが正常に更新されます。これらのコマンドは、私の場合、通常TUIの問題を引き起こします。

define c 
  continue
  refresh
end

define n
  next
  refresh
end
0
Alex Nibley