Como podemos rastrear problemas de travamentos de programas no Linux?

12

Se um aplicativo travar no Windows, podemos verificar o Visualizador de Eventos nas ferramentas de Administração para ver o que travou. Às vezes, tem informações úteis, outras não, mas é um começo.
No linux, se um aplicativo (algum) falha, como se começa a rastrear o que aconteceu?
Existe, por exemplo, algum registro central ou algo semelhante?

Jim
fonte
2
A maneira padrão de depurar esse tipo de coisa é iniciar manualmente o aplicativo problemático a partir de um terminal. Dessa forma, você pode ver todas as mensagens de erro impressas.
terdon
2
As versões de 64 bits do Linux registram uma descrição curta de um processo com falha (que morreu devido a um sinal) /var/log/syslog. O Linux fornece uma maneira de um daemon ser notificado sobre falhas no processo. O apport do Ubuntu e o abrt da Red Hat usam isso para fornecer recursos centralizados de registro e geração de relatórios. Geralmente, um dump principal é salvo para que você possa chamar um depurador no programa com falha.
Mark Plotnick
Eu teria votado positivamente para essa pergunta, mas o OP parece não querer ajudar a comunidade aceitando ou publicando uma resposta; portanto, encontrarei uma pergunta semelhante que aceita uma resposta e votamos positivamente que, na esperança de que suba ao topo dos resultados de pesquisa e ajude os futuros pesquisadores
Mawg diz que restabelece Monica

Respostas:

13

Existe, por exemplo, algum registro central ou algo semelhante?

O local normal para os logs do sistema é /var/log/. O que é colocado em cada log depende da configuração do syslog, mas geralmente tudo, exceto os logins, é acessado /var/log/syslog.

Isso não garante que aplicativos individuais tenham deixado alguma pista no caso de um problema. Mas eles, ou o shell, provavelmente cuspirão algo nos fluxos de erro padrão de saída / padrão, e se você executar um aplicativo problemático em primeiro plano a partir de um terminal, poderá ver essas coisas.

Cachinhos Dourados
fonte
O que se deve procurar /var/log? Qual arquivo de log? Existe alguma convenção?
Jim Jim
2
Se você pode fazer com que a falha aconteça, faça-o e veja qual arquivo em / var / log foi alterado mais recentemente. Com ls -lart, o último arquivo na listagem foi o mais recente alterado.
Devon_C_Miller
Existem convenções s - o linux é muito mais heterogêneo que o windows. O syslog refere-se ao criador de logs do sistema, mas não existe uma implementação universal e as variações podem ser configuradas de maneiras diferentes. A lógica geral é que as mensagens são enviadas para o syslog pelo aplicativo e, em seguida, essas mensagens são classificadas em arquivos diferentes. Como mencionado, geralmente tudo acaba /var/log/syslog, mas distros diferentes fazem as coisas de maneira diferente. Se você souber qual syslog está usando, poderá examinar sua configuração para determinar isso.
Goldilocks
6

No Ubuntu, os segfaults são escritos em /var/log/kern.log. Eu testei, criando um programa que segfaults:

void main() {
    int *a=0;
    *a=0;
}

Depois de segfaulted, havia esta linha em /var/log/kern.log:

a.out[534]: segfault at 0 ip 08048432 sp bfaec8c0 error 6 in a.out[8048000+1000]
sashoalm
fonte
1

No Ubuntu, se você estiver iniciando seu aplicativo a partir de um arquivo do iniciador .desktop, adicione a opção Terminal=trueao seu arquivo .desktop.

Selah
fonte