Я хочу, чтобы программа C создавала свалку ядра при определенных обстоятельствах. Это программа, которая работает в производственной среде и не легко останавливается и перезапускается для настройки других типов кода отладки. Кроме того, поскольку он находится в рабочей среде, я не хочу вызывать abort(). Расследуемые вопросы нелегко реплицируются в непроизводственной среде. Я бы хотел, чтобы программа, когда она обнаруживала определенные проблемы, сама создавала дамп ядра, желательно с достаточной информацией, чтобы переименовать файл, а затем продолжить.Как программа C может генерировать основной свалку без завершения?
ответ
void create_dump(void)
{
if(!fork()) {
// Crash the app in your favorite way here
abort() || (*((void*)0) = 42);
}
}
Fork процесс затем аварии ребенка - это даст вам снимок всякий раз, когда вы хотите
Исходный код для создания дампа ядра находится в «gcore», который является частью пакета gdb.
Кроме того, Солнце имеет gcore.
Кроме того, у вас должен быть отдельный процесс, выполняющий дамп ядра, поскольку текущий процесс должен быть приостановлен. Вы найдете подробности в источнике gcore, или вы можете просто запустить gcore вашей платформы с вашим процессом в качестве цели.
Sun описывает, как получить основной файл на Solaris, HP-UX, Redhat и Windows here.
Solaris имеет программу gcore. HP-UX может иметь это. В противном случае используйте gdb и его gcore commmand. Windows имеет win-dbg-root \ tlist.exe и win-dbg-root \ adplus.vbs
Вы действительно хотите ядро или просто стек? Если все, что вам нужно, это stacktrace, вы можете взглянуть на open source here и попробовать и интегрировать код оттуда, или просто просто вызвать его из командной строки достаточно.
Я считаю, что некоторый код в проекте gdb также может быть полезен.
Другое, что вы, возможно, захотите сделать, это использовать gdb для присоединения к запущенному процессу.
$ gdb /path/to/exec 1234 # 1234 is the pid of the running process
Примечание: вопрос о запуске GDB из самого приложения: http://stackoverflow.com/questions/3151779/how-its-better-to-invoke-gdb-from- program-to-print-its-stacktrace – 2014-04-16 00:00:51
Другим способом может быть использовать Google Coredumper библиотеки. Это создает аналогичный результат для технологии fork + abort, но лучше работает с многопоточными приложениями (временно приостанавливает все потоки перед форкингом, чтобы они не делали беспорядок в дочернем элементе).
Пример:
#include <google/coredumper.h> ... WriteCoreDump('core.myprogram'); /* Keep going, we generated a core file, * but we didn't crash. */
- 1. C программа без основной функции?
- 2. программа Куайн без основной()
- 3. C программа основной калькулятор
- 4. Как называется программа C/C++ без конца?
- 5. Программа застряла после завершения
- 6. Может ли использовать программу C без основной функции?
- 7. Утечка памяти C++ после завершения основной обработки?
- 8. Программа завершения правильно
- 9. Valgrind: Как заставить его генерировать сводку кучи без завершения процесса?
- 10. Программа не может повторно подключиться к Firebird после аномального завершения
- 11. Как сделать Check сгенерировать свалку ядра?
- 12. Ошибка завершения основной информации
- 13. Создайте java-свалку, когда OutOfMemory
- 14. Программа завершения Serial.write в Qt (C++)
- 15. Компиляция основной C/GDI + программа (начинающий вопрос)
- 16. Не понимаю, ошибки в основной C++ программа
- 17. C программа без стандартной библиотеки C. Как?
- 18. Как создать свалку?
- 19. Microsoft.Diagnostics.Runtime: как читать свалку?
- 20. Как предотвратить свалку базы данных?
- 21. Программа завершения работы без закрытия отдельных экземпляров excel
- 22. Python: Как читать свалку соленья?
- 23. Программа C/C++ без файлов заголовков
- 24. Почему программа завершается после завершения
- 25. Может ли System.exit() возвращаться без завершения JVM?
- 26. C: программа останавливается без ошибок
- 27. Как программа C может вызвать функцию Perl?
- 28. Программа OpenGL не достигла основной
- 29. основной() программа не выйдет нормально
- 30. [C++] Программа завершающего без объяснения
Ooohh, это очень здорово - мне всегда приходилось поднимать (6) и перезапускать процесс. – paxdiablo 2008-09-25 05:44:43