A veces, es posible que las aplicaciones no funcionen correctamente o incluso que se bloqueen. Cuando surgen tales problemas, es útil tener un método coherente y reproducible para resolver el problema, de modo que los desarrolladores tengan un método confiable y datos suficientes para solucionar los problemas y encontrar una posibilidad. En el mundo del software, GNU Debugger (gdb) es una poderosa aparejo que los desarrolladores pueden usar para hacer precisamente eso.
Las cosas se complican un poco más con las instantáneas. Las instantáneas se ejecutan como aplicaciones aisladas e independientes con fuertes restricciones de seguridad. Son administrados e iniciados por el servicio Snapd. Esto significa que cuando fogata a gdb para solucionar problemas de Snaps con problemas de inicio o tiempo de ejecución, la ejecución existente de la aplicación está enmascarada por los procesos de Snapd que la concluyen. Para sortear este engendro y desear a los desarrolladores las herramientas adecuadas para el trabajo, el demonio snap asimismo incluye gdbserver, que permite a los usuarios inspeccionar sus aplicaciones de una modo muy similar al sistema clásico de Linux.
Cuando ejecuta un Snap con el indicador –gdb, gdb se inicia y se comporta como si fuera llamado en el mismo ejecutable fuera del entorno Snap. Alternativamente, puede ejecutar gdbserver, que asimismo le permite conectarse de forma remota a gdb y ejecutar aplicaciones como un legatario sin privilegios (en serie).
La sintaxis es la venidero:
snap run --gdbserver “snap name”
Esto iniciará el snap, detendrá la ejecución en el punto de entrada, creará una instancia de gdb y permitirá el ataque remoto a través de un puerto suspensión imprevisible que se imprime en la camino de comando.
snap run --gdbserver snapsterWelcome to "snap run --gdbserver".
You are right before your application is run.
Please open a different terminal and run:gdb -ex="target remote :44626" -ex=continue -ex="signal SIGCONT"
(gdb) continueor use your favorite gdb frontend and connect to :44626
Echemos un vistazo a una aplicación que se bloquea cuando se fogata. Si está interesado en participar, consulte el venidero contenido para obtener detalles sobre el código fuente existente, las marcas de compilación y el contenido de segfexample snap snapcraft.yaml.
snap run --gdbserver segfexampleWelcome to "snap run --gdbserver".
You are right before your application is run.
Please open a different terminal and run:
...
Se ejecuta en una ventana de terminal separada gdb -ex = «control remoto de destino: 34621» muestra la venidero salida:
gdb -ex="target remote :34621" -ex=continue -ex="signal SIGCONT"
GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1
Copyright (C) 2018 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 "x86_64-linux-gnu".
...
Debes ingresar para continuar con la ejecución cuenta Hasta que se encuentre con el problema, como la mayoría de los problemas que puede solucionar con gdb, estos deben ser independientes del tiempo y reproducibles:
Program received signal SIGCONT, Continued.
0x00007f1255a0918b in raise () from target:/lib/x86_64-linux-gnu/libc.so.6
(gdb)
…
Reading /lib/x86_64-linux-gnu/libc.so.6 from remote target…
Reading /lib/x86_64-linux-gnu/libc-2.31.so from remote target…
Reading /lib/x86_64-linux-gnu/.debug/libc-2.31.so from remote target…Program received signal SIGSEGV, Segmentation fault.
0x0000561bbcd5e6be in main () at source.c:11
11 pointer[i]=i;
Una vez que sepa dónde está ocurriendo el problema, puede solucionarlo como lo haría normalmente. Puede establecer condiciones, puntos de interrupción, desglosar el código y mucho más. Incluso necesitará símbolos de depuración para las versiones específicas de las bibliotecas que están usando sus aplicaciones para descifrar las funciones donde ocurre el error. Si está utilizando bibliotecas que están disponibles en los archivos de su sistema, puede instalar los paquetes de depuración adecuados. Cuando desarrolle su propia aplicación, compílela con símbolos o cargue los símbolos en el depurador.
La resolución de problemas nunca es claro. A veces, pueden surgir problemas complejos en el software y su resolución puede arrostrar tiempo y esfuerzo. Con este fin, los ecosistemas de progreso deben ser lo más predictivos y flexibles posible para proporcionar a los desarrolladores una configuración valioso y claro de usar que puedan usar para solucionar problemas de código. Con gdbserver, snapd proporciona a los editores (y usuarios) de Snap una forma conveniente de investigar y corregir errores repetibles y fallas sin restar valía a los beneficios de la restricción de seguridad de Snap.
Si tiene alguna sugerencia sobre cómo hacer que la posibilidad de problemas de aplicaciones sea aún más útil y confiable, únase a nuestro foro y comparta sus opiniones.
Foto de Christian Buehner en Unsplash.