2014-12-21 47 views
19

Pod Linuksem, gdy proces się zawiesza, tworzony jest zrzut pamięci.Jak utworzyć zrzut główny, nawet jeśli proces normalnie działa?

Jednak chcę utworzyć zrzut główny, gdy proces się nie zawiesza, ale wygląda na niepoprawny. Zdalny ekspert potrzebuje zrzutu pamięci do analizy.

W systemie Windows możemy utworzyć plik zrzutu procesu za pośrednictwem menedżera zadań, a następnie proces nadal działa.

Czy to możliwe pod Linuksem?

Odpowiedz

20

połączenia gdb, następnie

attach pid 
gcore 

gdzie pid jest id procesu procesu.

9

Jeśli chcesz zrobić to programowo, spróbuj użyć google-coredumper. Ich przykład:

#include <google/coredumper.h> 
... 
WriteCoreDump('core.myprogram'); 
/* Keep going, we generated a core file, 
* but we didn't crash. 
*/ 
14

Można to zrobić w kodzie z:

if (fork() == 0) abort(); 
+5

To prawdopodobnie nie jest najlepsze rozwiązanie, ale chłopak jest sprytny :) –

17

Można użyć gcore narzędzia bezpośrednio z linii poleceń:

gcore [-o filename] pid 

Przy okazji, jeśli chcesz aby zobaczyć tylko ślad stosu procesu, narzędzie wykona zadanie.

Oba narzędzia dostarczane są z gdb.