Как «перезагрузить» исходные файлы в GDB

Есть ли в gdb команда, которую я могу использовать для (повторно) загрузить / "обновить" исходные файлы? ( Насколько я могу судить, gdb работает только с исходными каталогами , согласно Отладка с GDB: Источник - и нет специальной команды для «обновления» )

Предыстория моей проблемы:

Я использую виртуальную машину с ядром отладки, поэтому я могу подключиться к локальному экземпляру gdb и отлаживать модули ядра. Модули компилируются с включенной отладочной информацией, и это указывает папки, в которых хранится источник модулей ( Укажите GDB 6.5 использовать исходный код, встроенный в объектный файл - Stack Overflow ). У меня есть исходные каталоги на одном и том же пути как на виртуальной машине, так и на локальном компьютере.

Проблема в том, что мне нужно проделать несколько шагов, чтобы заставить модуль перейти в режим segfault, а удаленный GDB войти в стек. Затем я выполняю обратную трассировку и вижу ссылки на исходные файлы, то есть

#0  0xc0132a13 in ?? ()
#1  0xc056e551 in ?? ()
#2  0xc056e506 in ?? ()
#3  0xd8be53f3 in mymodule_func1 (var1=0xd79f9b44, var2=0x0, var3=825269148)
    at /media/src/mymodule.h:954
#4  0xd8be53d0 in mymodule_func2 (data=3617561412)
    at /media/src/mymodule.h:936
#5  0xc014fe87 in ?? ()
#6  0xc0151478 in ?? ()

Затем я пытаюсь сказать, list /media/src/mymodule.h:954 - и я понимаю, что у меня есть изменил материал в локальной версии файла mymodule.h !!

Итак, я отменяю изменения - но, к сожалению, GDB не видит этих изменений! И, конечно, я не хочу перезапускать GDB - потому что это означает, что мне нужно перезапустить виртуальную машину и пройти всю процедуру, чтобы снова вернуть модуль ядра в состояние segfault :( !!

Затем я пытаюсь сделать что-то вроде этого:

(gdb) show symbol-reloading
Dynamic symbol table reloading multiple times in one run is off.
(gdb) set symbol-reloading on
(gdb) add-symbol-file ~/mymodule.o 0xd8be4000
add symbol table from file "/media/src/mymodule.o" at
    .text_addr = 0xd8be4000
(y or n) y
Reading symbols from /media/src/mymodule.o...done.

... в надежде, что он каким-то образом "перезагрузит" исходные файлы - но, к сожалению, list /media/src/mymodule.h:954 показывает, что это не так ' t, ничего не меняется - даже если gdb распознает, что что-то изменилось, как в предупреждении : исходный файл более свежий, чем исполняемый. ... ( так что на данный момент мне нужно перезапустить всю ВМ и gdb :(: ()

24
задан Community 23 May 2017 в 12:10
поделиться