gdb coredump - вызвать функцию или продолжить выполнение - PullRequest
0 голосов
/ 17 июня 2020
• 1000 У меня есть тип C ++, в котором определено operator<<, и я хотел бы распечатать этот тип без необходимости писать красивый принтер в python.

Из того, что я нашел до сих пор, кажется, что GDB обрабатывает coredump иначе, чем обычные подчиненные , которые имеют активное выполнение и, следовательно, не могут вызывать функции (что подтверждается этим ответом , в котором говорится, что вы не можете использовать continue для coredump).

Хотя я могу понять, почему это может иметь место по умолчанию, можно ли исправить GDB, чтобы загрузить coredump в память и вызвать его как работающий процесс? Если программа завершилась из-за ошибки Seg. Ошибка , тогда можно вручную изменить сломанный путь после загрузки ядра в GDB и, возможно, даже продолжить выполнение программы после.

1 Ответ

0 голосов
/ 17 июня 2020

Хотя я могу понять, почему это может быть так по умолчанию, можно ли исправить GDB, чтобы загрузить coredump в память и вызвать его как работающий процесс?

In теория , такое возможно. В практике вы обнаружите, что это серьезное мероприятие, которое (вероятно) займет у вас как минимум несколько недель, если не несколько месяцев.

Я хотел бы красиво напечатать этот шрифт без необходимости писать красивый принтер в python.

Могу вас заверить, что написать красивый принтер в Python - это на много меньше работы .

Если программа прервана из-за Seg. Ошибка, тогда можно вручную изменить сломанный путь после загрузки ядра в GDB и потенциально даже продолжить выполнение программы после.

Нет, если программа использует какие-либо ресурсы уровня ОС, которые не были захвачены в дамп ядра. Все сокеты, файлы, IPC SysV и т. Д. c. et c. уйдет. Этот ответ согласен.

...