O comando kdb
O comando kdb pode ser usado para análise de sistemas e arquivos de sistema em diferentes estados.
O comando kdb pode ser usado para analisar o seguinte:
- Um sistema em execução.
Quando utilizado para analisar um sistema em execução, o comando kdb abre o arquivo especial /dev/pmem , que permite o acesso direto à memória física do sistema e contorna o mecanismo de tradução de endereço normal do processador. O comando kdb executa sua própria tradução de endereço internamente usando os mesmos algoritmos que o depurador do kernel do KDB. Isso permite que o usuário visualize dados por endereço efetivo.
Nota: Somente o usuário root pode utilizar o comando kdb para analisar um sistema em execução. - Um arquivo de dump do sistema produzido por um sistema acidental-acidentado anteriormente.
Quando um sistema trava, a imagem do dump do sistema é criada com tradução de memória ligada. Como resultado, qualquer memória física não mapeada para o espaço de endereço efetivo no momento do dump não pode ser incluída no arquivo de dump. Apenas a memória pertencente ao processo que estava em execução no processador que criou a imagem do dump pode ser incluída no arquivo de dump. Como todos os endereços dentro do dump do sistema já são endereços eficazes, o comando kdb não executa sua tradução de endereço interno.
Um dump do sistema contém certas estruturas críticas de dados. Um dump do sistema não contém todo o espaço de endereço efetivo. O comando kdb pode não ser capaz de visualizar certas regiões de memória. Se alguém tentar acessar um endereço de memória não incluído no dump, o comando kdb imprime uma mensagem de aviso.
Ao analisar um dump do sistema, é imperativo que o comando ' kdb use a mesma versão do arquivo UNIX que estava em execução no momento do dump. Para verificar as estampas do tempo de dump e arquivos UNIX , use os seguintes comandos:
$ what unix | grep _kdb_buildinfo _kdb_buildinfo unix_64 Mar 14 2005 10:24:29 (This is the return that users will get.) $ what dump | grep _kdb_buildinfo _kdb_buildinfo unix_64 Mar 14 2005 10:24:29Os estampas de tempo de ambos os arquivos devem ser idênticos. Também é possível verificar o carimbo de tempo do comando kdb executando os seguintes comandos:
$ what /usr/sbin/kdb_64 | grep _kdb_buildinfo _kdb_buildinfo unix_64 Mar 4 2005 14:45:20 $ what /usr/sbin/kdb_mp | grep _kdb_buildinfo _kdb_buildinfo unix_mp Mar 4 2005 14:31:53Este carimbo de tempo geralmente será mais antigo do que o dos arquivos dump e UNIX . Geralmente, o comando kdb pode ler o dump nessa condição. No entanto, se a diferença de versão entre o comando kdb e o arquivo UNIX for muito grande, kdb pode ser incapaz de ler o dump. Neste caso, use uma versão de kdb que esteja mais próxima da versão do UNIX que é usada.
Nota: O subcomando cdt ou a opção de linha de comandos -v podem ser usados para determinar exatamente quais regiões do espaço de endereço efetivo estão incluídas na imagem do sistema. Para obter mais informações sobre o subcomando CDT , consulte subcomando cdt. Para obter mais informações sobre a opção de linha de comando -v , consulte comando kdb.
O comando kdb contém um subconjunto dos subcomandos encontrados no depurador do kernel do KDB. Os subcomandos para definição de pontos de quebra e single-etapas por meio de código não estão disponíveis no comando kdb . Como o comando kdb é implementado como um programa ordinário de espaço usuário, ele não tem controle sobre os processadores em um sistema. Similarmente, quaisquer subcomandos que acessem diretamente o hardware (por exemplo, os subcomandos PCI) não estão disponíveis. Quando você trabalha com um dump do sistema, quaisquer subcomandos que modifiquem a memória não são válidos porque o dump do sistema é meramente um instantâneo da memória real em um sistema.
A lista completa de subcomandos disponíveis para o debugger do kernel do KDB e o comando kdb estão incluídos em Subcomandos listas.