VoipExperts

  • Aumentar tamanho da fonte
  • Tamanho da fonte padrão
  • Diminuir tamanho da fonte

BackTraces

Avaliação do Usuário: / 1
PiorMelhor 
BackTraces, você já usou? não?, então vamos lá...

Backtrace é um modo de obter informações sobre o que esta acontecendo de errado quando um programa fecha inesperadamente, no nosso caso vamos usar o asterisk como exemplo. Existem dois tipos de backtraces que também é conhecido como bt, que são: bt e bt full... antes de começar, quando for iniciar o asterisk deve-se iniciar com a opção "-g", essa opção é para informar ao asterisk para criar o arquivo "core" que é o arquivo de falhas.

Caso você esteja preocupado em não usa essa opção e usa o scritp safe_asterisk, não se preocupe pois ele inicia o asterisk com essa opção "-g" por padrão, na duvida...

asteriskexperts:/tmp$ ps aux | grep asterisk
expert     17832  0.0  1.2   2348   788 pts/1    S    Jul12   0:00 /bin/sh /usr/sbin/safe_asterisk
expert     26686  0.0  2.8  15544  1744 pts/1    S    Jul13   0:02 asterisk -vvvg -c


"Aug13   0:02 asterisk -vvvg -c"

um outro detalhe, se você compilou o asterisk sem selecionar a opção "DONT_OPTIMIZE" não terá efeito, essa opção
pode ser encontrada no "make menuselect" em Compiler Flags - > "DONT_OPTIMIZE", agora supondo que tenhamos feito isso, mão na massa...

quando tiver uma falha no asterisk, será gerado um arquivo core "dumped" em /tmp. Para ter certeza de que ele realmente existe, você pode procurar ele no diretorio /tmp...

caso você encontre vários arquivos core devemos ver o ultimo escrito vendo a data e hora de criação exemplo:

asteriskexperts:/tmp$ ls -l /tmp/core.*
-rw-------  1 expert expert 10592256 Jul 18 12:40 /tmp/core.26252
-rw-------  1 expert expert  9924608 Jul 18 13:12 /tmp/core.26340
-rw-------  1 expert expert 10862592 Jul 18 13:14 /tmp/core.26374
asteriskexperts:/tmp$


Agora que temos o arquivo core escrito no disco, e a nossa parte final é extrair o "bt" a partir do core. os arquivos core criado são extremamente grande(Nem tanto) pois ali esta todo nosso debug e isso é normal, não se assuste.

*** Note: Nunca anexar arquivos core em um bug tracker, somente é necessario os bt e bt full ***

Para a extrair o bt vamos usar o gdb uma otima ferramenta. Para verificar se o gdb esta instalado digite o comando "gdb -v" exemplo:

asteriskexperts:/tmp$ gdb -v
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
asteriskexperts:/tmp$


Caso não tenha instaldo, pode ser encontrado em: http://sourceware.org/gdb/download/
[...]

Agora carregando o arquivo core:

asteriskexperts:/tmp$ gdb asterisk /tmp/core.26374
....
nesse meio terá varias saida do arquivo..
....
Reading symbols from /usr/lib/asterisk/modules/app_externalivr.so...done.
Loaded symbols for /usr/lib/asterisk/modules/app_externalivr.so
#0  0x29b45d7e in ?? ()
(gdb)


Na linha de comando do gdb, digite: bt
você vera algo semelhante:

(gdb) bt
#0  0x29b45d7e in ?? ()
#1  0x08180bf8 in ?? ()
#2  0xbcdffa58 in ?? ()
#3  0x08180bf8 in ?? ()
#4  0xbcdffa60 in ?? ()
#5  0x08180bf8 in ?? ()
#6  0x180bf894 in ?? ()
#7  0x0bf80008 in ?? ()
#8  0x180b0818 in ?? ()
#9  0x08068008 in ast_stopstream (tmp=0x40758d38) at file.c:180
#10 0x000000a0 in ?? ()
#11 0x000000a0 in ?? ()
#12 0x00000000 in ?? ()
#13 0x407513c3 in confcall_careful_stream (conf=0x8180bf8, filename=0x8181de8 "Zap/pseudo-1324221520") at app_meetme.c:262
#14 0x40751332 in streamconfthread (args=0x8180bf8) at app_meetme.c:1965
#15 0xbcdffbe0 in ?? ()
#16 0x40028e51 in pthread_start_thread () from /lib/libpthread.so.0
#17 0x401ec92a in clone () from /lib/libc.so.6
(gdb)


A saída do bt é a informação que temos sobre o bug tracker.

agora o "bt full" no seguinte modo:

(gdb) bt full
#0  0x29b45d7e in ?? ()
No symbol table info available.
#1  0x08180bf8 in ?? ()
No symbol table info available.
#2  0xbcdffa58 in ?? ()
No symbol table info available.
#3  0x08180bf8 in ?? ()
No symbol table info available.
#4  0xbcdffa60 in ?? ()
No symbol table info available.
#5  0x08180bf8 in ?? ()
No symbol table info available.
#6  0x180bf894 in ?? ()
No symbol table info available.
#7  0x0bf80008 in ?? ()
No symbol table info available.
#8  0x180b0818 in ?? ()
No symbol table info available.
#9  0x08068008 in ast_stopstream (tmp=0x40758d38) at file.c:180
No locals.
#10 0x000000a0 in ?? ()
No symbol table info available.
#11 0x000000a0 in ?? ()
No symbol table info available.
#12 0x00000000 in ?? ()
No symbol table info available.
#13 0x407513c3 in confcall_careful_stream (conf=0x8180bf8, filename=0x8181de8 "Zap/pseudo-1324221520") at app_meetme.c:262
        f = (struct ast_frame *) 0x8180bf8
        trans = (struct ast_trans_pvt *) 0x0
#14 0x40751332 in streamconfthread (args=0x8180bf8) at app_meetme.c:1965
No locals.
#15 0xbcdffbe0 in ?? ()
No symbol table info available.
#16 0x40028e51 in pthread_start_thread () from /lib/libpthread.so.0
No symbol table info available.
#17 0x401ec92a in clone () from /lib/libc.so.6
No symbol table info available.
(gdb)


Precisamos também da saída do gdb. Isso nos dá mais detalhes, em comparação com a simples "bt". Então, nós recomendamos que você use o "bt full" ao invés do "bt".

A ultima "extração" seria para saber todos os vestígios das threads. Mesmo se o asterisk corre na mesma thread para cada chamada, ele poderia ter criado novas threads.

Para ter certeza de que nós temos as informações corretas, basta fazer:

(gdb) thread apply all bt

Thread 1 (process 26252):
#0  0x29b45d7e in ?? ()
#1  0x08180bf8 in ?? ()
#2  0xbcdffa58 in ?? ()
#3  0x08180bf8 in ?? ()
#4  0xbcdffa60 in ?? ()
#5  0x08180bf8 in ?? ()
#6  0x180bf894 in ?? ()
#7  0x0bf80008 in ?? ()
#8  0x180b0818 in ?? ()
#9  0x08068008 in ast_stopstream (tmp=0x40758d38) at file.c:180
#10 0x000000a0 in ?? ()
#11 0x000000a0 in ?? ()
#12 0x00000000 in ?? ()
#13 0x407513c3 in confcall_careful_stream (conf=0x8180bf8, filename=0x8181de8 "Zap/pseudo-1324221520") at app_meetme.c:262
#14 0x40751332 in streamconfthread (args=0x8180bf8) at app_meetme.c:1965
#15 0xbcdffbe0 in ?? ()
#16 0x40028e51 in pthread_start_thread () from /lib/libpthread.so.0
#17 0x401ec92a in clone () from /lib/libc.so.6
(gdb)


Essa saída nos da informações cruciais sobre cada thread.

Agora, basta criar um arquivo output.txt e jogar a saida do "bt full" (e / ou "bt"), junto com a "thread apply all bt".

depois disso você podera fazer uploads para o bug tracker.

OBS: lembre-se anexe sua saida e não cole.

 

Estatísticas

Membros : 4749
Conteúdo : 222
Links da Web : 8
Visualizações de Conteúdo : 299567

Mais Ativos

#
Name
Points
1
Guilherme Loch Góes
13905
2
Administrator
4708
3
Paulo Leonardo Benatto
3151
4
Rodrigo Vronscki
2679
5
Renato dos Santos
1411

Usuários Online

Nós temos 43 visitantes online