Użyj stosu GDB Drukuj ślad pliku podstawowego

Użyj stosu GDB Drukuj ślad pliku podstawowego
Jeśli programujesz od jakiegoś czasu, natknąłeś się na ten termin Zrzut rdzenia.

Jeśli spojrzysz na stronę Core Man, określa ją jako zrzut podstawowy jako „plik zawierający obraz pamięci procesu w momencie zakończenia. Ten obraz może być używany w debuggerze (e.G.) GDB w celu sprawdzenia stanu programu w momencie jego zakończenia ”.

Mówiąc prosto, plik zrzutu podstawowego to plik zawierający informacje o pamięci o procesie, gdy określony proces kończy się.

Istnieją różne powody, dla których procesy mogą zawieść i utworzyć plik zrzutu podstawowego. Ten samouczek pokaże, jak korzystać z GDB do wyświetlania pliku zrzutu podstawowego i wydrukowania śladu stosu.

Krok 1: Zdobądź zrzut rdzenia

Zanim zaczniemy analizować plik zrzutu podstawowego, musimy go wygenerować. Aby to zrobić, możemy użyć programu Buggy.

Rozważ kod buggy.C poniżej:

#włączać
#włączać
#włączać
int main ()
int num = 0;
int *ptr = malloc (sizeof (int));
int *noptr = null;
for (inti = 0; i<10; i++)
if (i == 5)
*noptr = i;

w przeciwnym razie
*ptr = i;

printf („I is %d \ n”, i);

W powyższym kodzie tworzymy pętlę dla od 0 do 10. Jeśli wartość i wynosi 5, odwołujemy się do złego wskaźnika, powodując w ten sposób segfault i tworząc zrzut rdzenia.

Clang -g Bugg.C -O Buggy

Teraz uruchom kod jako:

./powozik

Powyższy kod poda wyjście jako:

I mam 0
I mam 1
I mam 2
Mam 3
Mam 4
Wadę segmentacji (zrzucone rdzeń)

Krok 2: Otwórz zrzut rdzenia z GDB

Aby otworzyć plik zrzutu podstawowego z GDB, użyj polecenia GDB i przejdź ścieżkę do zrzutu wykonywalnego i rdzenia jako parametry jako:

$ GDB Buggy Core

Spowoduje to uruchomienie GDB i zawiera zrzut rdzenia, jak pokazano na poniższym wyjściu:

Aby pokazać ślad stosu pliku podstawowego, użyj polecenia Backtrace:

(GDB)

Wniosek

Ten samouczek pokazał, jak używać GDB do otwarcia plik zrzutu podstawowego i uzyskania śladu stosu.