Analiza zrzutu Jądra Solaris

Używam pstack do analizy plików zrzutu pamięci w Solarisie

Jak inaczej przeanalizować zrzut pamięci z Solarisa?

Jakich poleceń można użyć w tym celu?

Jakie inne informacje będą dostępne z wysypiska?

Author: Matt Curtis, 2008-09-22

8 answers

Możesz użyć debuggera modułowego Solaris, mdb lub dbx. mdb jest dostarczany z pakietem SUNWmdb (lub SUNWmdb x dla wersji 64-bitowej).

Plik core jest obrazem uruchomionego procesu w momencie jego awarii.

W zależności od tego,czy Twoja aplikacja została skompilowana z flagami debugowania, czy nie, będziesz mógł wyświetlić obraz stosu, a więc wiedzieć, która funkcja spowodowała rdzeń, aby uzyskać wartość parametrów, które zostały przekazane do tej funkcji, wartość zmiennych, przydzielone strefy pamięci ...

W ostatnich wersjach Solarisa, możesz skonfigurować plik core za pomocą polecenia coreadm ; na przykład, możesz mieć zmapowane segmenty pamięci, do których proces był dołączony.

Zobacz dokumentację MDB i dokumentację dbx. Karta GDB quick reference {[10] } jest również pomocna, gdy znasz podstawy GDB.

 17
Author: philant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-27 04:39:51

Myślę, że każda odpowiedź na to pytanie powinna zaczynać się od prostego przepisu:

Dla dbx przepis jest następujący:

% dbx a.out core
(dbx) where
(dbx) threads
(dbx) thread t@3
(dbx) where
 3
Author: Chris Quenelle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-31 06:04:31

Jeśli zrzut pamięci pochodzi z programu, który napisałeś lub zbudowałeś, użyj dowolnego debuggera, którego normalnie byś użył do debugowania uruchomionej aplikacji. Wszystkie powinny być w stanie załadować pliki core. Jeśli nie jesteś wybredny w kwestii debugerów, a używasz Solarisa, polecam dbx. Pomoże to uzyskać najnowszą wersję FCS Sun Studio z łatkami lub najnowszą ekspresową wersję Sun Studio. Jest to również bardzo pomocne, jeśli można załadować plik core do debuggera na tym samym systemie, w którym plik core został utworzony. Jeśli kod w bibliotekach różni się od tego, kiedy został utworzony plik core, to śledzenie stosu nie będzie przydatne, gdy przechodzi przez biblioteki. Debuggery używają również bibliotek pomocniczych systemu operacyjnego do zrozumienia struktur danych libthread i runtime linker, więc jeśli chcesz załadować plik core na innej maszynie, musisz się upewnić, że biblioteki pomocnicze zainstalowane na systemie operacyjnym pasują do struktur danych systemu operacyjnego. Możesz dowiedzieć się wszystkiego, czego nigdy nie chciałeś aby dowiedzieć się o tych bibliotekach systemowych w białej księdze, która została napisana kilka lat temu.

Http://developers.sun.com/solaris/articles/DebugLibraries/DebugLibraries_content.html

 3
Author: Chris Quenelle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-19 09:35:50

Można użyć GDB.

Może dać telefon, który był próbowany przed zrzutem.

Http://sourceware.org/gdb/

Http://en.wikipedia.org/wiki/GDB

Posiadanie źródła jest świetne i jeśli możesz odtworzyć błędy jeszcze lepiej, ponieważ możesz go użyć do debugowania.

W przeszłości świetnie mi szło.

 1
Author: Brian G,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 11:39:39

Komenda pflags jest również przydatna do określenia stanu, w jakim znajdował się każdy wątek, gdy był wyrzucany. W ten sposób często można wskazać problem.

 1
Author: TLS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-23 05:09:40

Dołącz do obrazu procesu za pomocą debuggera dbx:

Dbx [executable_file_name] [coredump_file_name]

Ważne jest, aby nie było żadnych zmian w pliku wykonywalnym, ponieważ rdzeń został wyrzucony (tzn. nie został przebudowany).

Możesz zobaczyć ślad stosu, aby zobaczyć, gdzie program się rozbił za pomocą polecenia dbx "where".

Możesz poruszać się w górę i w dół stosu za pomocą komend " up " I "down" lub przeskakiwać do dokładnej ramki stosu za pomocą " frame [number]", z liczbami widocznymi w wyjście "gdzie".

Wartość zmiennych lub wyrażeń można wydrukować poleceniem " print [expr]".

Miłej zabawy.

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 10:54:25

Znalazłem dbx na moim pudełku solaris x86 w

/opt/SUNWspro/bin/dbx
Zdrówko!
 1
Author: Will Charlton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-30 17:04:49

Sugerowałbym najpierw wypróbowanie gdb, ponieważ moim zdaniem łatwiej jest nauczyć się podstawowych zadań niż natywnych debugerów Solaris.

 1
Author: adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-09 14:04:05