Pracuję nad aplikacją serwera C o wysokiej przepustowości działającą jako demon. W pewnych okolicznościach aplikacja ulega awarii (zawsze bez rdzenia). Jak mogę debugować demona uruchomionego za pomocą gdb, aby znaleźć miejsce, które generuje SIGSEGV?Debugowanie demona uruchomieniowego przy użyciu gdb
Objaśnienia:
wiem jak podłączyć za pomocą gdb procesie uruchomionym poleceniem dołączyć
Po dołączeniu do procesu, to zatrzyma. Jeśli uruchomię to "kontynuuj", gdb pozostanie zablokowane, jeśli program się nie zawiesza. Jeśli naciśniesz CTRL-C, proces się kończy i nie mogę po prostu odłączyć gdb.
Pytanie brzmi: czy istnieje sposób na kontynuowanie procesu bez utknięcia gdb, ale możliwość odłączenia się, jeśli proces się nie zawiesza?
Czy próbowałeś zmienić ustawienia coredump np komenda 'ulimit'? I/lub uruchomić wersję debugowania? A może dodać więcej rejestrowania, aby zawęzić możliwe miejsca awarii? –
Próbowałem wszystkich możliwości. Proces działa jako usługa typu "upstart" na serwerze Ubuntu i jest ustawiony na określonego użytkownika podczas uruchamiania usługi. Plik limits.limf zawiera nielimitowane wartości dla nofile i rdzenia dla tego użytkownika. Ustawiłem fs.suid_dumpable i kernel.core_uses_pid w /etc/sysctl.conf Dodałem więcej rejestrowania, ale jest to serwer o wysokim natężeniu ruchu i generuje zbyt dużo danych wyjściowych. –