GDB 위쪽 화살표가 작동하지 않습니다.

GDB 위쪽 화살표가 작동하지 않습니다.

비슷한 질문을 많이 검색했지만 아무것도 찾지 못했습니다. gdb를 실행할 때 위쪽 화살표를 사용하여 이전 명령을 탐색할 수 없습니다. 위쪽 및 아래쪽 화살표는 무시됩니다. 일부 설정을 변경한 후 이 동작을 관찰하기 시작했지만 어떤 설정을 변경했는지 정확히 기억할 수 없습니다.

~/.xinputrc파일이 없고 $TERM로 설정되어 있습니다 xterm.

답변1

아마도 기록 크기가 0이기 때문일 것입니다.

gdb 기록 크기를 확인할 수 있습니다.

(gdb) show history size
The size of the command history is 0.
(gdb) 

만약에기록 최대 크기는 0입니다., 그 다음에위쪽 화살표물론 기록을 저장할 수 없기 때문에 작동하지 않습니다.

내가 찾은 주된 이유는 bash 환경 변수 HISTSIZE가 0이거나 비어 있기 때문입니다. 생각하기 때문에 답답해요기록 크기 =(널값오른쪽) bash 기록은 ~/.bashrc에 저장할 수 있습니다.무제한 입장, 하지만부작용은 gdb가 $HISTSIZE를 참조하여 gdb 기록 크기를 0으로 설정한다는 것입니다.gdb가 시작될 때.

그래서 당신은 넣을 수 있습니다기록 크기=10000000~/.bashrc에서 이제 위쪽 화살표가 작동합니다(경고하다: ~/.bash_history를 백업하세요.HISTSIZE를 사용하기 전):

(gdb) show history size 
The size of the command history is 10000000.
(gdb) 

계속 고집한다면기록 크기 =~/.bashrc는 비어 있습니다. 옵션은 ~/.bashrc에 이 함수를 생성하는 것입니다.

gdb() ( HISTSIZE=70000000; /usr/bin/gdb "$@"; )

. ~/.bashrc다시 로드하고 이제 변경되었습니다.

(gdb) show history size 
The size of the command history is 70000000.
(gdb) 

gdb를 종료한 후 원본 $HISTSIZE는 덮어쓰지 않습니다(즉, 제한 없이 비어 있는 상태로 유지). gdb 함수는 서브쉘을 사용하기 때문입니다. 즉, 괄호로 묶인 gdb() (...):

$ echo $HISTSIZE

$ 

또한 종료 시 기록을 활성화하고 기록 파일을 저장할 위치를 고려해야 합니다. 여기 내 ~/.gdbinit 파일이 있습니다. 아직 없으면 새로 만드세요.

$ cat ~/.gdbinit 
set environment HISTSIZE 10000000
set history filename ~/.gdb_history
set history save on
set history size 10000000
set history expansion on
show history

$ 

왜냐고 물을 수도 있다환경 설정 HISTSIZE 10000000작동 안함? 이는 페이지에 표시된 것처럼 gdb 자체가 아닌 프로그램에만 영향을 미치기 때문입니다.http://www.delorie.com/gnu/docs/gdb/gdb_20.html:

환경 변수 varname을 value로 설정합니다. 이 값은 GDB 자체가 아닌 프로그램에 대해서만 변경됩니다.

이제 패치를 사용할 수 있습니다.https://sourceware.org/bugzilla/show_bug.cgi?id=16999:

2015-06-17 18:14:09 UTC:

...이 패치는 잘못된 GDBHISTSIZE의 동작을 bash가 HISTSIZE를 처리하는 방식과 일관되게 만듭니다. null 값이나 범위를 벗어난 GDBHISTSIZE([0, INT_MAX] 외부)가 발생하면 이제 기록 크기를 0 대신 무제한으로 설정합니다. 숫자가 아닌 GDBHISTSIZE를 만나면 아무 것도 하지 않습니다.

2015-06-17 18:30:10 UTC:

다음 버전의 GDB에서는 더 이상 HISTSIZE를 읽지 않습니다. 그렇게 하면 해결하는 것보다 더 많은 문제가 발생하기 때문입니다. 대신, 동일한 목적으로 GDBHISTSIZE를 읽습니다. 좋은 측정을 위해 GDBHISTSIZE의 동작은 bash가 HISTSIZE를 읽는 방식과 일치하므로 GDBHISTSIZE를 -1로 설정하면 GDB의 히스토리 크기가 무제한이 됩니다.

관련 정보