|
21 de julho de 2008 |
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.
|
|
|
Tutoriais sobre Asterisk e VoIP |
|
A snalização MFC/R2 é uma sinalização utilizada em telefonia digital, entregue ao consumidor em um link de dados E1, encontrada com muita freqüencia em cidades do interior e em alguns pontos nas capitais brasileiras onde não existe a possibilidade de entrega de um link ISDN ou RDSI como é conhecido no Brasil. Como nos EUA a sinhalização MFC/R2 não existe, pouca ou melhor dizendo nenhuma importância foi dada ao desenvolvimento de bibliotecas que suportassem este tipo de sinalização no Asterisk. |
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... |
|
Um ponto algumas vezes esquecido, por nós técnicos, é a interface com o usuário. Nos preocupamos em dimensionar corretamente o servidor, ter uma boa infra-estrutura de rede, aplicar uma politica de QoS na rede entre outras e nos esquecemos de um fator determinante para o sucesso e aceitação dos nossos projetos: a interface com o usuário. |
|
Se você trabalha com telefonia IP, talvez ainda não tenha ouvido falar do OpenSER, mas certamente você ouviu falar sobre o Asterisk. Bom eu adoro uma chamada polêmica e eu já vi esta questão formulada muitas vezes em fóruns e listas de discussão. Então eu vou me atrever a comparar estes dois softwares muito populares dedicados ao mercado de VoIP. A idéia aqui não é mostrar qual é o melhor, mas principalmente mostrar como eles são diferentes um do outro. Abaixo está uma comparação tópico por tópico. |
Neste tutorial vou explicar como compilar e instalar o codec speex no ASTERISK, que é juntamente com o ilbc uma ótima alternativa para quem não quer gastar com licensas de codecs proprietários como o G729.
|
|
O Power over Ethernet é uma tecnologia relativamente nova que evoluiu sobre a, amplamente divulgada Ethernet, que disponibiliza energia em corrente contínua confiavelmente através dos mesmos cabos que disponibilizam dados Ethernet. |
O Queue LOG analyzer é uma opção GPL para geração de relatórios e gráficos sobre as filas e CDR Call Detailed Record do Asterisk . O autor é o Earl C. Terwillinger.
|
Esse tutorial tem como objetivo demonstrar o processo de configuração do Astribank XORCOM. |
|
|