Стрелка вверх GDB не работает

Хорошо, переходя по ссылке schaiba к отчету об ошибках, я создал .sh сценарий со следующими строками:

#!/bin/bash
xrandr --newmode "1920x1040_60.00"  165.50  1920 2040 2240 2560  1040 1043 1053 1079 -hsync +vsync
xrandr --addmode VNC-0 "1920x1040_60.00"
xrandr -s 1920x1040

после chmod +x файл и помещение его в моем ~/.vnc папка он выполняется, когда я вхожу в систему с xrdp.

3
18.10.2014, 21:18
1 ответ

Это может быть связано с тем, что размер истории равен 0.

Вы можете проверить размер истории gdb:

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

Если максимальный размер истории равен 0, то стрелка вверх , конечно, не работает, потому что никакая история не может быть сохранена.

Основная причина, по которой я нашел эту переменную, заключается в том, что переменная HISTSIZE бэш-окружения равна 0 или пуста. Это расстраивает, потому что я думал, что HISTSIZE= (пустое значение справа) в ~/.bashrc может сделать историю бэша сохраненной неограниченными элементами, но побочным эффектом является gdb обращение к $HISTSIZE, а затем установка размера истории gdb на 0 при старте gdb.

Таким образом, вы можете поместить HISTSIZE=10000000 на ваш ~/.bashrc и стрелка вверх должна теперь работать (WARN: резервное копирование вашего ~/. bash_history перед воспроизведением HISTSIZE):

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

Если вы настаиваете на том, чтобы HISTSIZE= оставался пустым на ~/.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

$ 

Вы можете спросить, почему set environment HISTSIZE 10000000 не работает? Потому что это влияет только на программу, а не на саму gdb, как указано на странице http://www.delorie.com/gnu/docs/gdb/gdb_20.html:

Установите значение varname переменной окружения. Значение изменяется для только для программы, а не для самого GDB.

Патч доступен сейчас, см. https://sourceware.org/bugzilla/show_bug.cgi?id=16999 :

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

.... Этот патч делает поведение недействительного GDBHISTSIZE совместимым с тем, как бэш ручки HISTSIZE. Когда мы сталкиваемся с нулем или вне диапазона. GDBHISTSIZE (за пределами [0, INT_MAX]) мы теперь устанавливаем размер истории в значение неограниченный вместо 0. Когда мы сталкиваемся с нецифровым GDBHISTSIZE, мы ничего не делать.

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

Следующая версия GDB больше не будет читать HISTSIZE вообще, потому что это вызывает больше проблем, чем решает. Вместо этого ГДБГИСЦИЗЕ является читать с той же целью. И для хорошей меры, поведение GDBHISTSIZE будет соответствовать тому, как bash читает HISTSIZE, поэтому настройка GDBHISTSIZE до -1 приведет к тому, что размер истории GDB будет неограниченным.

7
27.01.2020, 21:12

Теги

Похожие вопросы