Pergunta

Eu uso pstack para analisar arquivos de dump de memória no Solaris

O que mais posso analisar o dump de memória do Solaris?

O que comandos podem ser usados ??para fazer isso?

Que outras informações estarão disponíveis a partir do despejo?

Foi útil?

Solução

Você pode usar Solaris modular depurador, mdb, ou dbx. MDB vem com SUNWmdb (ou SUNWmdb X para a versão de 64 bits) do pacote.

Um arquivo de núcleo é a imagem do seu processo em execução no momento em que caiu.

Dependendo se o aplicativo foi compilado com sinalizadores de depuração ou não, você será capaz de visualizar uma imagem da pilha, portanto, saber qual função causou o núcleo, para obter o valor dos parâmetros que foram passados ??para essa função , o valor das variáveis, as zonas de memória alocada ...

Em versões do Solaris recentes, você pode configurar o que o arquivo de núcleo irá conter com o comando coreadm; por exemplo, você pode ter os segmentos de memória mapeados processo foram anexadas a.

Consulte MDB documentação e dbx documentação . A GDB Cartão de referência rápida também é útil uma vez que você sabe o básico de GDB.

Outras dicas

Eu acho que qualquer resposta a esta pergunta deve começar com uma receita simples:

Para dbx, a receita é:

% dbx a.out core
(dbx) where
(dbx) threads
(dbx) thread t@3
(dbx) where

Se o core dump é de um programa que você escreveu ou construído, em seguida, usar qualquer depurador você usaria normalmente para depurar o aplicativo em execução. Eles devem ser capazes de carregar arquivos principais. Se você não é exigente quanto depuradores, e você está usando Solaris, eu recomendaria dbx. Ela vai ajudar a obter a última versão FCS do Sun Studio com manchas, ou então a mais recente versão Express do Sun Studio. É também muito útil se você pode carregar o arquivo de núcleo para o depurador no mesmo sistema onde o arquivo de núcleo foi criado. Se o código nas bibliotecas é diferente de quando o arquivo de núcleo foi criado, em seguida, rastreamento de pilha não será útil quando se passa por bibliotecas. Depuradores também usam bibliotecas auxiliares OS para a compreensão das estruturas de dados libthread e vinculador em tempo de execução, por isso, se você precisa carregar o arquivo de núcleo em uma máquina diferente, você vai querer certificar-se as bibliotecas auxiliares instalados no OS corresponder as estruturas de dados do sistema no o oS. Você pode descobrir tudo o que você nunca quis saber sobre essas bibliotecas do sistema em um papel branco que foi escrito há alguns anos.

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

gostaria de sugerir tentar gdb primeiro porque é mais fácil de aprender tarefas básicas do que os depuradores Solaris nativas em minha opinião.

GDB pode ser usado.

Pode dar o telefonema que foi tentada antes do despejo.

http://sourceware.org/gdb/

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

Tendo a fonte é grande e se você pode reproduzir os erros ainda melhor como você pode usar isso para depurá-lo.

trabalhou muito para mim no passado.

O pflags comando também é útil para determinar o estado de cada thread estava quando núcleo despejado. Desta forma, muitas vezes você pode identificar o problema.

Anexar para a imagem do processo usando o depurador dbx:

DBX [executable_file_name] [coredump_file_name]

É importante que não houve mudanças para o executável desde o núcleo foi despejado (ou seja, não foi reconstruída).

Você pode ver o rastreamento de pilha para ver onde o programa travou com o comando dbx "onde".

Você pode mover para cima e para baixo da pilha com o comando "up" e "down", ou saltar para o quadro de pilha exata com "frame [número]", com os números observados na saída do "onde".

Você pode imprimir o valor de variáveis ??ou expressões com "print [expr]" comando.

Divirta-se.

Eu encontrei dbx em meus Solaris x86 caixa na

/opt/SUNWspro/bin/dbx

Felicidades!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top