En general en adJ (OpenBSD) 6.1, no es fácil depurar aplicaciones que manejan múltiples procesos. A continuación presentamos como hacerlo en el caso de PostgreSQL. PrerequisitosSuponemos que:
* Tiene un porte de PostgreSQL "especial" copiando de ProcedimientoDetenga el servicio PostgreSQL doas sh /etc/rc.d/postgres stop Inicie con su versión ya compilada en modo de depuración –recomendable dentro de una sesión de $ cd /usr/ports/pobj/postgresql-9.6.6/postgresql-9.6.6/src/backend $ doas su _postgresql -c "./postgres -D /var/postgresql/data -d 5" A continuación inicie un cliente en otra terminal y examine el número del nuevo proceso $ psql -h/var/www/var/run/postgresql -Uusuario mibase =# SELECT pg_backend_pid(); En otra terminal, puede usar ese PID (digamos 1234) para "pegarse" al proceso en ejecución con $ doas gdb /usr/ports/pobj/postgresql-9.6.6/postgresql-9.6.6/src/backend/postgres > (gdb) attach 1234 Tras esto habrá interumpido el proceso y ya puede depurar normalmente, por ejemplo poniendo un punto de ruptura al comienzo de una función, digamos (gdb) breakpoint DefineCollation (gdb) cont Desde el cliente de PostgreSQL ya puede dar comandos. =# CREATE COLLATION esp (LOCALE='es_CO.UTF-8'); Y desde la sesión de Breakpoint 1, DefineCollation (names=0x21058dac0, parameters=0x21058dbe8) at collationcmds.c:49 49 DefElem *fromEl = NULL; (gdb) next 50 DefElem *localeEl = NULL; (gdb) print names $1 = (List *) 0x21058dac0 (gdb) print *names $2 = {type = T_List, length = 1, head = 0x21058da98, tail = 0x21058da98} Otras funciones relacionadas con locale donde podrían ponerse puntos de ruptura son Dedicatoria y BibliografíaEste material de dominio público se dedica al que dijo que son bienaventurados quienes oyen la palabra de Dios y la guardan (Lc 11:28).
|