Есть ли команда в gdb
, которую я могу использовать для (re) загрузки / "обновления" исходных файлов? (Насколько я вижу, gdb
работает только с исходными каталогами, в соответствии с Отладка с помощью GDB: Source - и нет специальной команды для "обновления" )
Справочная информация о моей проблеме:
Я использую виртуальную машину с ядром отладки, поэтому я могу подключиться к локальному экземпляру gdb
и может отлаживать модули ядра. Модули скомпилированы с информацией об отладке, и это указывает папки, в которых хранится источник модулей (Инструкции GDB 6.5 использовать источник, встроенный в объектный файл - Переполнение стека), У меня есть исходные каталоги в одном и том же пути (-ах) как на виртуальной машине, так и на локальной машине.
Проблема заключается в следующем: мне нужно сделать несколько шагов, чтобы получить модуль 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, потому что это означает, что мне нужно перезапустить виртуальную машину и пройти всю процедуру, чтобы снова вернуть модуль ядра:(!!
Затем я пытаюсь сделать что-то вроде этого:
(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
показывает, что это не так, ничего не меняется - хотя gdb
делает распознает что что-то изменилось, как в warning: Source file is more recent than executable.
... (, так что пока я должен перезапустить всю VM и gdb
, а также:(:()