Red Hat Training

A Red Hat training course is available for RHEL 8

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 e gid, 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 por ids. O ids é uma lista separada por espaço de ids de linha. Um valor especial all aplica o comando a todos os threads.
break location thread id if condition
Estabelecer um ponto de parada em um certo location com um certo condition somente para o número do fio id.
watch expression thread id
Estabeleça um ponto de vigia definido por expression somente para o número do fio id.
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