mozilla
Los resultados de tu búsqueda

    Depurar B2G usando gdb

    Borrador
    Esta página no está completa.

    Depurar Firefox OS usando gdb es fácil. Este artículo lo ayudará a hacerlo aún más fácil.

    Iniciar el depurador en modo proceso único

    Nota: Antes de ejecutar el depurador, podría configurar un archivo .userconfig para personalizar ciertas cosas. Vea Personalización con el archivo .userconfig para más detalles.

    Para reiniciar Firefox OS y ejecutarlo bajo el control de gdb, simplemente use el script run-gdb.sh:

    ./run-gdb.sh
    

    Nota: Si desea depurar en el emulador, asegúrese de no tener teléfonos conectados; esto puede causar conflctos con la habilidad de gdb de conectarse al emulador.

    Si ya se está ejecutando Firefox OS y desea adjuntarlo sin reiniciarlo, puede hacer algo como:

    ./run-gdb.sh attach
    

    Depurar tareas fuera del proceso

    Because of the threaded nature of Firefox OS, you often need to be able to debug tasks other than the main B2G task. To do this, the simplest way is to use the b2g-ps command to find out the PID of the process that you need to debug:

    $ 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
    

    Aquí, Browser es el proceso hijo usado como el "proceso contenido" para la aplicación navegador. Así que si quiere depurar el proceso contenido, en este ejemplo, debería hacer:

    $ ./run-gdb attach 4308

    A veces es útil ser notificado inmediatamente de la creación de cualquier proceso hijo. Esto puede lograrse iniiando run-gdb.sh con la variable de entorno MOZ_DEBUG_CHILD_PROCESS:

    MOZ_DEBUG_CHILD_PROCESS=1 ./run-gdb.sh

    Habiendo hecho esto, lanzar una aplicación OOP en Firefox OS mostrará el PID de plugin-container para la nueva tarea y esperará 30 segundos, tiempo suficiente para hacer

    $ ./run-gdb attach <pid>

    como se mencionaba anteriormente.

    Si está tratando de depurar algo que ocurre durante el booteo, deberá lanzar la instancia del depurador para la nueva aplicación con bastante rapidez. Una vez que el nuevo depurador fue lanzado, debería presionar inmediatamente "c" para continuar ejecutando la nueva tarea.

    Soporte

    Que nivel de funcionalidad se espera

    Al menos las siguientes caracterísiticas de depuración deberían funcionar definitivamente. Si no lo hacen, lo más probable es que un simple ajuste a la configuración las haga funcionar:

    • Símbolos para todas las librerías (excepto quizás algunos drivers en ciertos teléfonos con Android)
    • Backtraces with full debug info (except for optimized-away argument values)
    • Breakpoints: you should be able to break on a symbol, or on a file:line, or on an address. All should work.
    • Single-stepping ('s' and 'n' should both work)

    Las siguientes características de depuración not están soportadas. No intente usarlas.

    • Watchpoints.

    Solución de problemas

    Hay unas pocas cosas que intentar cuando GDB no está funcionando como se describe anteriormente.

    Asegúrese que el clon de B2G está actualizado

    Siempre tenga en mente que para actualizar su clon de B2G debe ejecutar estos dos comandos:

    git pull
    ./repo sync

    Olvidarse de git pull aquí es una típica razón por la que se terminará con un run-gdb.sh viejo y no se beneficiará de las mejoras recientes.

    Asegúrese de adjuntarse al proceso correcto

    Adjuntarse al proceso equivocado (ej. proceso principal de B2G en lugar del proceso Browser) podría explicar por que los breakpoints no se alcanzan.

    Asegúrese que los símbolos se leyeron correctamente

    En gdb, use info shared para verificar que los símbolos se leyeron correctamente:

    (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
    ...

    La columna Syms Read debería decir Yes en todas partes. Quizás en algún teléfono android podría ver Yes (*) para algunas librerías del sistema o drivers; eso debería estar bien. No se debería ver ningún No.

    Si se ve un No, ese es el primer problema y debe resolverlo antes de buscar otra cosa.

    Busque cualquer mensaje de error en la salida de terminal justo después de tipear el comando run-gdb.sh.

    También verifique en esa salida de terminal output que el comando GDB esté correcto. En particular, el último argumento de la línea de comando debería ser la ruta al ejecutable de b2g. Aquí hay un ejemplo correcto:

    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

    Verifique el valor de estas variables de GDB: solib-search-path y 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".

    Si necesita ayuda, intente el canal de IRC #b2g. Si piensa que encontró un error, infórmelo en B2G issue tracker.

    Etiquetas y colaboradores del documento

    Contributors to this page: MPoli
    Última actualización por: MPoli,
    Ocultar la barra lateral