Почему GDB не удаляет вспомогательные переменные?

Согласно документации, GDB заявляет:

Функция: gdb.set_convenience_variable (имя, значение)
[...] Если значение равно None, вспомогательная переменная удаляется.

но когда я выполню

gdb.set_convenience_variable('foo', 1)
gdb.set_convenience_variable('foo', None)

show conv в оболочке GDB показывает $foo = void, Ожидаемое поведение - GDB полностью удалит переменную. В пользовательской команде я использую uuids в качестве имен переменных на стороне gdb для хранения промежуточных результатов выражений (чтобы избежать конфликтов имен), поэтому эти переменные не идеальны. Я не видел ничего об этом в трекере ошибок gdb, и, просматривая код, он не появляется, есть метод, чтобы фактически удалить вспомогательную переменную - просто установите его в void ( здесь).

0 ответов

Я согласен. Функция для создания внутренних переменных показывает, почему это не было реализовано сразу: эта функция просто присоединяет к существующему списку внутренних переменных. Удаление элемента из такого односвязного списка не является полностью тривиальным делом, поскольку вы должны объединить соответствующие элементы, что может подтвердить любой, кто когда-либо реализовывал односвязный список, но это тоже несложно... давайте посмотрим, что говорят сопровождающие. Если вы обнаружите такие проблемы, подумайте о том, чтобы сами отправлять такие отчеты об ошибках!

Другие вопросы по тегам