8.7. Depuração de forquilhas ou programas rosqueados com GDB
Alguns programas utilizam forquilhas ou roscas para conseguir a execução de códigos paralelos. A depuração de múltiplos caminhos de execução simultânea requer considerações especiais.
Pré-requisitos
- Você deve compreender os conceitos de bifurcação e rosca do processo.
Depuração de programas bifurcados com GDB
O forking é uma situação em que um programa (parent) cria uma cópia independente de si mesmo (child). Use as seguintes configurações e comandos para afetar o que a GDB faz quando um garfo ocorre:
A configuração
follow-fork-mode
controla se a GDB segue os pais ou a criança após o garfo.set follow-fork-mode parent
- Depois de um garfo, depurar o processo pai. Este é o padrão.
set follow-fork-mode child
- Depois de um garfo, depurar o processo da criança.
show follow-fork-mode
-
Exibir a configuração atual do
follow-fork-mode
.
A configuração
set detach-on-fork
controla se a GDB mantém o controle do outro processo (não seguido) ou o deixa em funcionamento.set detach-on-fork on
-
O processo que não é seguido (dependendo do valor de
follow-fork-mode
) é destacado e funciona de forma independente. Este é o padrão. set detach-on-fork off
-
A GDB mantém o controle de ambos os processos. O processo que é seguido (dependendo do valor de
follow-fork-mode
) é depurado como de costume, enquanto o outro é suspenso. show detach-on-fork
-
Exibir a configuração atual do
detach-on-fork
.
Depuração de programas roscados com GDB
A GDB tem a capacidade de depurar os fios individuais, e de manipulá-los e examiná-los independentemente. Para fazer a GDB parar somente a linha que é examinada, use os comandos set non-stop on
e set target-async on
. Você pode adicionar estes comandos ao arquivo .gdbinit
. Após essa funcionalidade ser ativada, a GDB está pronta para realizar a depuração de threads.
A GDB utiliza um conceito de current thread. Por padrão, os comandos se aplicam somente à linha atual.
info threads
-
Mostrar uma lista de tópicos com seus números
id
egid
, indicando o tópico atual. thread id
-
Defina a linha com o especificado
id
como a linha atual. thread apply ids command
-
Aplique o comando
command
a todos os tópicos listados porids
. Oids
é uma lista separada por espaço de ids de linha. Um valor especialall
aplica o comando a todos os threads. break location thread id if condition
-
Estabelecer um ponto de parada em um certo
location
com um certocondition
somente para o número do fioid
. watch expression thread id
-
Estabeleça um ponto de vigia definido por
expression
somente para o número do fioid
. command&
-
Executar o comando
command
e retornar imediatamente ao prompt do gdb(gdb)
, continuando qualquer execução de código em segundo plano. interrupt
- Parar a execução em segundo plano.
Recursos adicionais
- Depuração com GDB
- Depuração com GDB