Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Depurando o B2G usando gdb e ferramentas relacionadas

gdb é um depurador de linha de comando que fornece um grande número de opções úteis para depurar aplicações Firefox OS. Outras ferramentas também estão disponíveis como b2g-ps, que é um empacotador da ferramanta padrão ps que mostra os nomes dos aplicativos que estão sendo executados numa instância do B2G. Esse artigo mostra como executar tarefas de depuração com essas ferramentas.

Começando a depurar no modo single-process

Nota: Antes de executar o depurador você pode configurar o arquivo .userconfig para customizar algumas coisas. Veja o artigo Customização com o arquivo .userconfig para maiores detalhes.

Para reiniciar Firefox OS e executá-lo sob o controle do gdb, simplesmente use o scritp run-gdb.sh:

./run-gdb.sh

Nota: Se você quiser depurar no emulador, certifique-se que não há telefones conectados ao computador, isso pode gerar conflitos ao gdb tentar conectar ao emulador.

Se o Firefox OS já estiver rodando e você quiser conectar o gdb sem reiniciá-lo, você pode fazer algo como isso:

./run-gdb.sh attach

Depurando tarefas fora do processo

Devido ao fato da natureza multiprocessamento do Firefox OS, frequentemente você necessitará depurar tarefas que não a tarefa B2G. Para fazer isso, o modo mais simples é usar o comando b2g-ps para descobrir o PID do processo que você precisa depurar:

$ adb shell b2g-ps
b2g              root      106   1     189828 56956 ffffffff 40101330 S /system/b2g/b2g
Browser          app_0     4308  106   52688  16188 ffffffff 400db330 S /system/b2g/plugin-container

No exemplo, Browser é um processo filho usado como "content process" para a aplicação browser. Assim se você deseja depurar o "content process", nesse exemplo, faça:

$ ./run-gdb.sh attach 4308

Algumas vezes, é útil ser notificado imediatamente de qualquer criação de processos filhos.

Isso pode ser ativado iniciando run-gdb.sh com a variável de ambiente MOZ_DEBUG_CHILD_PROCESS:

MOZ_DEBUG_CHILD_PROCESS=1 ./run-gdb.sh

Feito isso, lançando uma aplicação OOP no Firefox OS será mostrado o PID do "plugin-conteiner" para essa tarefa, e o processo dormirá por 30 segundos, tempo suficiente para você rodar o comando para anexar o depurador como visto abaixo:

$ ./run-gdb.sh attach 4308

Se você estiver tentando depurar algo que ocorre durante o boot, você tem que lançar uma instância do depurador muito rápido. Uma vez que o depurador foi iniciado, você deve imediatamente pressionar "c" para continuar a executar a nova tarefa.

Suporte

Qual o nível de funcionalidade esperado

Os recursos de depuração a seguir ao menos devem funcionar, caso contrário, provavelmente um pequeno ajuste na configuração o fará funcionar:

  • Símbolos para todas as bibliotecas (exceto talvez alguns drivers de alguns telefones Android)
  • Informações de backtraces com depuração completa (exceto para valores de argumentos optimized-away)
  • Breakpoints: Você deve poder criar breakpoints num símbolo, ou em arquivo:linha, ou em endereço. Todas as opções devem funcionar.
  • Single-stepping ('s' e 'n' devem funcionar)

Os serguintes recursos de depuração não são suportados. Não tente usá-los:

  • Watchpoints.

Resolução de problemas

Existem algumas coisas para tentar resolver caso o gdb não funcione como descrito acima.

Certifique-se que seu clone B2G está atualizado

Tenha sempre em mente que para atualizar seu clone B2G você deve executar esses dois comandos:

git pull
./repo sync

Ao esquecer do git pull poderá acontecer de você executar um antigo run-gdb.sh e não se beneficiar das últimas melhorias.

Certifique-se de que você anexou o gdb ao processo correto

Anexando-se a um processo errado (por exemplo, processo B2G principal versus processo Browser) pode explicar porque o depurador não para nos breakpoints.

Certifique-se de que os símbolos foram corretamente lidos

  1. No gdb, use info shared para checar se os símbolos foram corretamente lidos:
    (gdb) info shared
    From        To          Syms Read   Shared Object Library
    0xb0001000  0xb0006928  Yes         out/target/product/otoro/symbols/system/bin/linker
    0x40051100  0x4007ed74  Yes         /hack/b2g/B2G/out/target/product/otoro/symbols/system/lib/libc.so
    0x401ab934  0x401aba2c  Yes         /hack/b2g/B2G/out/target/product/otoro/symbols/system/lib/libstdc++.so
    ...
  2. A coluna Syms Read deve estar com Yes sempre. Talvez em alguns telefones Android você pode ver Yes (*) para algumas bibliotecas de sistema ou drivers, isso estará OK. Você somente não poderá ver um No.
  3. Se você vir um No, será seu primeiro problema e você deve resolvê-lo antes de procurar qualquer outra coisa.
  4. Procure por alguma outra mensagem de erro na saída do terminal logo após executar o comando run-gdb.sh.
  5. Verifique também no terminal se a saída do terminal do comando GDB está ok. Em particular, o último argumento da linha de comando deve ser o caminho para o executável b2g. A seguir um exemplo:
    prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-gdb -x /tmp/b2g.gdbinit.bjacob /hack/b2g/B2G/objdir-gecko/dist/bin/b2g
  6. Verifique o valor dessas variáveis GDB: solib-search-path e solib-absolute-prefix:
    (gdb) show solib-search-path
    The search path for loading non-absolute shared library symbol files is /hack/b2g/B2G/objdir-gecko/dist/bin:out/target/product/otoro/symbols/system/lib:out/target/product/otoro/symbols/system/lib/hw:out/target/product/otoro/symbols/system/lib/egl:out/target/product/otoro/symbols/system/bin:out/target/product/otoro/system/lib:out/target/product/otoro/system/lib/egl:out/target/product/otoro/system/lib/hw:out/target/product/otoro/system/vendor/lib:out/target/product/otoro/system/vendor/lib/hw:out/target/product/otoro/system/vendor/lib/egl.
    (gdb) show solib-absolute-prefix
    The current system root is "out/target/product/otoro/symbols".

Nota: Se você precisar de mais ajuda, tente o canal #b2g no IRC. Se você acredita ter encontrado um bug, reporte-o aqui.

 

Etiquetas do documento e colaboradores

 Colaboradores desta página: jwhitlock, rbrandao
 Última atualização por: jwhitlock,