Восстановление состояния программы из файла ядра - PullRequest
13 голосов
/ 18 декабря 2009

Можно ли при любых обстоятельствах восстановить состояние программы до того, каким оно было при создании файла ядра?

Причина, по которой я спрашиваю, состоит в том, что для того, чтобы воспользоваться способностью GDB выполнять функции и т. Д., Вам нужно иметь работающий экземпляр. Конечно, должна быть возможность создать фиктивный процесс из того же исполняемого файла с состоянием, установленным как содержимое ядра?

Если нет, то какие альтернативы существуют для ситуации, которая заставила меня хотеть сделать это в первую очередь? В этом случае обратная трассировка ядра привела к библиотечной функции, и я хотел скопировать входные данные для этого вызова функции, но один из входных данных был сложным объектом, который можно было легко сериализовать в строку с вызовом функции в рабочем экземпляр, но не так в дампе ядра.

Ответы [ 2 ]

7 голосов
/ 19 декабря 2009

Теоретически возможно делать именно то, что вы хотите, но (AFAICT) это не поддерживается в GDB (пока).

Лучше всего использовать GDB-7.0 и использовать встроенные скрипты Python для повторной реализации функции сериализации.

2 голосов
/ 19 декабря 2009

Это то, что файл ядра уже делает? Если вы загружаете GDB с оригинальным исполняемым файлом и файлом ядра

gdb myprogram.exe -c mycorefile

Тогда он пойдет в точку, где он разбился. Вы можете использовать все обычные функции проверки для просмотра переменных, просмотра трассировки стека и т. Д.

Или я неправильно понял ваш вопрос?

...