Ícone do site Embarcadero RAD Studio, Delphi, & C++Builder Blogs

Novo plug-in IDE: Parnassus Parallel Debugger

Marcação de editor de código avançado, interface de usuário de pilha de chamadas e ferramentas de depuração multithread – em um novo plugin para RAD Studio agora disponível gratuitamente.

Temos o prazer de anunciar uma nova extensão IDE disponível hoje para RAD Studio 10.4.1, criada pelo mesmo autor que os populares plug-ins Bookmarks e Navigator, Parnassus. Se você está lendo isso, ele já está disponível no GetIt para qualquer pessoa com assinatura de atualização: basta abrir o GetIt, ir para a seção Plug-ins do IDE e instalar o ‘Depurador Paralelo’. Requer Delphi ou C ++ Builder 10.4.1 ou mais recente.

O que é isso?

Algo para todos. Leia mais!

Algumas das novas marcações do editor, úteis para você mesmo se você não usar vários tópicos em seu aplicativo!

O problema

Se você tiver mais de um encadeamento em seu aplicativo, provavelmente deseja depurar a interação do encadeamento. Uma visão do IDE tradicional de um aplicativo depurado, embora possa listar vários threads em uma visão Threads, é tratar o aplicativo como se tivesse apenas um único thread: você verá apenas uma pilha de chamadas e os controles de execução / pausa / etapa são para todo o processo. Isso deixa você, um desenvolvedor que precisa depurar seu aplicativo, com perguntas como:

E talvez outras dúvidas ou desejos, até mesmo depurando apenas em um único thread, como:

Cada uma delas é respondida por este novo plugin.

Vamos examinar seus recursos. Na próxima seção, você lerá sobre a exibição Parallel Threads e as pilhas de chamadas paralelas; execução e revisão por thread; a visualização do processo; nova marcação do editor, incluindo threads e pilhas de chamadas no editor; definir a afinidade de thread de um ponto de interrupção; mover a execução atual; o novo menu principal do Thread; e mais…

A visão Parallel Threads

Exibir> Janelas de depuração> Threads paralelos

Esta janela lista todos os threads no processo, listados horizontalmente. Quando seu aplicativo está em execução, se estiver no Windows, cada thread tem um gráfico exibindo o uso da CPU.

Quando o aplicativo é pausado, cada thread exibe sua pilha de chamadas.

Ao pausar o processo, o depurador sempre mostrará a entrada principal da pilha de chamadas depurável. Ou seja, pode não mostrar a entrada superior na pilha de chamadas da maneira que o IDE tradicionalmente faz, mas mostrará o código-fonte seu que faz a chamada. A ideia aqui é depurar o que você tem controle – sempre mostre a fonte.

O botão mais à esquerda em cada barra de ferramentas de encadeamento pausa todo o processo, tornando esse encadeamento o encadeamento atual. É ‘pausar o processo neste tópico’. O botão mais à direita permite alterar a ordem de exibição dos tópicos, fixando os tópicos à esquerda ou ao lado de outro tópico fixado. Isso é útil quando você tem muitos threads em seu aplicativo e deseja manter aqueles de seu interesse agrupados. Se um encadeamento fixado tiver um nome, a fixação é persistente nas reinicializações do processo: quando você encerra e reinicia seu aplicativo, os mesmos encadeamentos são fixados.

Executando ou escalando um único thread

Os botões restantes da barra de ferramentas são para controle de execução de thread.

Os controles normais de execução, passagem, entrada, etc. do IDE são de nível de processo; isto é, eles executarão todo o processo, ativando todos os threads, e você apenas espera que nada mais aconteça até que a operação passo a passo seja concluída no thread que você está examinando. Na prática, muitos podem – exceções, pontos de interrupção, etc. – mais, é claro, às vezes você só quer ter certeza de que outros encadeamentos não sejam executados durante a depuração de um único encadeamento.

Esses botões da barra de ferramentas permitem que você execute e pise em um nível por thread. Você pode:

Para usá-los, certifique-se de que o tópico no qual você está interessado seja o tópico atual, clicando duas vezes em seu título ou nome. Você verá que desenha o título em negrito.

Cada um deles possui um atalho de teclado, o que significa que você pode acessar (etc) através do teclado, não apenas clicando em um botão com o mouse. Os atalhos são visíveis no menu Thread, que possui itens de menu para o thread atual (veja abaixo).

O controle de execução por thread é um dos recursos mais poderosos do Parallel Debugger.

Integração do Editor

Uma tarefa importante para entender o que está acontecendo em um aplicativo multithread é saber quando vários threads estão sendo executados na mesma área do código. O Parallel Debugger deixa isso claro ao adicionar marcação no editor para cada pilha de chamadas completa do thread. Eles são mostrados por meio de ‘tags’, pequenos marcadores coloridos no lado direito do editor.

A entrada da pilha de chamadas superior – ou seja, onde o encadeamento está sendo executado ‘agora’ – é marcada com uma tag de cor sólida, usando a cor do encadeamento. Outras entradas da pilha de chamadas para o mesmo tópico estão em uma versão desbotada da cor do tópico (observe que o tópico ainda está marcado com um círculo sólido na tag).

Isso permite que você leia rapidamente seu código e saiba, ‘Thread X está sendo executado em algum lugar dentro desta linha de código’ e ‘Thread Y e Thread Z estão ambos no mesmo método agora’. Você verá até onde os fios estão exatamente. Nesta captura de tela, o encadeamento atual é o azul e um segundo encadeamento (vermelho claro) está sendo executado com seu ponto de execução atual dentro de IsPrime (), mas a chamada para IsPrime destacou a linha acima do ponto de execução do encadeamento atual.

Execução Móvel

Antes de instalar o plugin, o IDE costumava exibir o ponto de execução do thread atual com uma pequena seta azul. Isso agora foi substituído por um grande chevron no lado esquerdo do editor de código.

Você pode alterar onde está o ponto de execução – onde o thread começará a ser executado na próxima vez que você clicar em Executar ou Etapa – simplesmente clicando e arrastando este marcador.

Afinidade de Thread de Ponto de Interrupção

Por padrão, os pontos de interrupção se aplicam a todos os threads. Antes de instalar o plug-in, os pontos de interrupção foram desenhados com um ponto vermelho, mas com o Parallel Debugger os threads recebem cores e vermelho significa o thread vermelho. Os pontos de interrupção que se aplicam a todos os threads agora são desenhados como uma roda multicolorida.

Para fazer um ponto de interrupção se aplicar a apenas um segmento específico, clique com o botão direito do mouse no ponto de interrupção. O novo menu Breakpoint permite que você escolha um thread ao qual o breakpoint será aplicado.

Aqui, esse ponto de interrupção se aplica apenas ao segmento verde.

A visão do processo

Exibir> Janelas de depuração> Processo

Esta janela mostra informações sobre o processo como um todo. Ele exibe o uso da CPU no nível do processo (novamente dividido em kernel e modo do usuário), o tipo de processo (por exemplo, Wow64) e tem botões executar / pausar / redefinir etc. Eles são de nível de processo, ou seja, fornecem a mesma funcionalidade que a barra de ferramentas de execução do próprio IDE.

Você também pode ver uma lista de tópicos clicando no botão na parte inferior, como uma maneira rápida de escolher o tópico atual (já que rolar horizontalmente na visualização Tópicos pode demorar mais se você tiver muitos tópicos.)

O menu principal do Tópico

O IDE agora tem um menu Thread, localizado à direita do menu Run. Isso fornece um menu para a maioria das operações diretas que você pode realizar para um thread. Ele permite que você defina o thread de interesse (ou seja, o thread atual se o processo estiver pausado, ou o thread que você deseja que se torne o thread atual na próxima pausa), e para o thread atual tem itens de menu para controle de execução do thread. Você pode ver os atalhos nesses itens de menu.

Ele também lista cada thread no aplicativo, e para cada um mostra que você executa o controle e a fixação, efetivamente os mesmos recursos da visualização Threads paralelos.

Nível de recurso

Por fim, o item de menu superior controla o nível de recurso do Parallel Debugger: o que ele faz quando seu aplicativo está em execução. O nível mais baixo é apenas para rastrear o uso da CPU: use-o se quiser que o depurador paralelo seja instalado, mas não deseja usá-lo ativamente para este aplicativo atualmente. Os próximos dois níveis controlam a profundidade com que o depurador rastreia as pilhas de chamadas de thread.

Use isso se você tiver dezenas ou centenas de tópicos. Nessa situação, você provavelmente está interessado apenas em um subconjunto de threads. Defina o nível de recurso como ‘Somente Pilhas de Chamadas Selecionadas’, e o depurador paralelo rastreará as pilhas de chamadas para o encadeamento principal, encadeamentos fixados e o encadeamento atual apenas por padrão. Você sempre pode obter a pilha de chamadas de qualquer thread clicando em um botão exibido na área da pilha de chamadas na visualização Threads.

Plataformas Suportadas

O Parallel Debugger tem funcionalidade total ao depurar localmente aplicativos no Windows.

Em outras plataformas, ou depuração remota, a funcionalidade depende do que o depurador suporta. O uso da CPU é compatível apenas com aplicativos locais do Windows (depuração não remota). A revisão ou execução por thread só funcionará em plataformas que suportam o congelamento de thread. Há um problema conhecido para C ++ Win64 em que as pilhas de chamadas não podem ser avaliadas: isso será corrigido em uma próxima versão do C ++ Builder.

Seguindo uma tradição do Parnassus iniciada com os Bookmarks, o Parallel Debugger resolve um bug! ( RSP-29768 .)

Em geral: se você estiver usando o Windows, o depurador tem funcionalidade total.

O plug-in suporta RAD Studio 10.4.1 (e mais recente, quando o 10.4.2 for lançado).

Obtendo o depurador paralelo

O depurador paralelo já está no GetIt!

Graças à Embarcadero, a Parnassus está disponibilizando o depurador gratuitamente para qualquer cliente RAD Studio com assinatura de atualização ativa. Abra GetIt, vá para a categoria Plug-ins IDE e clique em Instalar.

Tanto o Parnassus quanto o Embarcadero esperam que você considere esta extensão um ótimo acréscimo ao seu IDE.

A título pessoal, gostaria de agradecer à Embarcadero por se interessar pelo plugin e querer adicioná-lo ao GetIt, e a todos os meus testadores beta que usaram várias versões deste plugin de qualidade crescente desde agosto. Muito obrigado a todos!

Sair da versão mobile