2011-07-06 10 views
5

Napisałem niestandardową aplikację do obsługi zrzutu pamięci dla projektu. Zmieniono "/ proc/sys/kernel/core_pattern", aby wywołać mój dump-handler i jego wywołanie pomyślnie.Format pliku core-dump

Teraz problem polega na zapisaniu zrzutu pamięci w pliku rozpoznawanym przez gdb. Obecnie mój dump-handler odczytuje zrzut z STDIN i zapisuje go w pliku "core.dump". Kiedy próbuję załadować ten rdzeń zrzucić do gdb daje mi błąd:

(gdb) ... is not a core dump: File format not recognized

Kiedy uruchomić polecenie „Plik” na standardowym rdzeniem zrzucić to daje mi następujące:

core: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from './dump_gen'

i na zlecenie generowane wysypisko, 'plik' daje następujące:

core.dump: data

Proszę, może ktoś mi pomóc, jak poprawnie zapisać zrzut-core, aby można go było używać w gdb.

PS: Nie chcę używać standardowego pliku zrzutu pamięci.

Odpowiedz

4

myślę, że jakoś nie pisać wszystkich danych do pliku rdzenia.

Utwórz prosty skrypt, ustaw go na wykonywalny i ustaw główny wzór skryptu.

#!/bin/sh 
cat > /tmp/core.$$ 

Teraz wygenerować plik rdzenia (na przykład uruchomić sleep 1243 i naciśnij ctrl+\) i powinno działać.

Właśnie przetestowałem to na moim systemie i działa bez problemu.

+0

Dzięki za szybką odpowiedź. Sprawdziłem twoją metodę i zadziałało, więc spojrzałem na mój kod c i znalazłem błąd w kopiowaniu danych do bufora. Zadziałało. – AvadhP

+1

Mam również do czynienia z tym samym problemem, ale zastanawiam się, co by zrobiły powyższe kroki? czy wygeneruje nam nowy zrzut główny, który można przekazać jako argument do gdb? Dzięki! – sad

4

Pierwszą rzeczą, którą należy sprawdzić, jest flaga nagłówka Elf, która wskazuje, jaki to jest plik. Ma cztery wartości - obiekt współdzielony, niepołączony obiekt, plik wykonywalny i zrzut rdzenia. To najprawdopodobniej powoduje błędy gdb.

Spróbuj także zbadać go za pomocą programu objdump - może on odciąć cały plik ELF do analizy, która jego część najwyraźniej nie jest dobra.

można znaleźć spec ELF na http://refspecs.freestandards.org/elf/elf.pdf

Powiązane problemy