![parallel debugger demo screenshot 3 | Embarcadero RAD Studio Delphi C++Builder Blogs parallel debugger demo screenshot 3](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2020/12/parallel-debugger-demo-screenshot-3-7424382.png?resize=999%2C467&ssl=1)
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?
- Uma ferramenta para depurar aplicativos multithread
- … E também ajuda a depurar aplicativos tradicionais de thread único!
Algo para todos. Leia mais!
![editor before and after | Embarcadero RAD Studio Delphi C++Builder Blogs editor before and after 2](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2020/12/editor-before-and-after-7862533.gif?resize=300%2C42&ssl=1)
Algumas das novas marcações do editor, úteis para você mesmo se você não usar vários tópicos em seu aplicativo!
Table of Contents
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:
- Como posso ver se vários threads estão em execução no mesmo código ao mesmo tempo?
- Como posso ver o que todos os meus tópicos estão fazendo ao mesmo tempo?
- Como passo por um método em apenas um thread?
Ou seja, como faço para depurar um thread sem outros threads em execução e execução de código que eu não quero, atingindo pontos de interrupção, etc? - Quanta CPU está usando cada um dos meus threads? Eles são eficientes?
E talvez outras dúvidas ou desejos, até mesmo depurando apenas em um único thread, como:
- Eu gostaria que fosse fácil ver todos os métodos na pilha de chamadas destacados em meu código
- Eu gostaria de poder facilmente fazer um ponto de interrupção se aplicar apenas a um determinado tópico
- Eu gostaria que a marcação do editor mostrando a linha de código atual parecesse um pouco mais óbvia
- Eu gostaria que, ao pausar o processo, ele não me levasse para a visualização da CPU, mas me mostrasse apenas minha própria fonte
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.
- Cada thread recebe uma cor exclusiva , começando com um azul médio para o thread principal do aplicativo. Esta cor é usada como um guia visual para identificar o fio em todos os lugares.
- Os nomes dos threads são exibidos. Mesmo se você não nomear seu thread principal, o Parallel Debugger é inteligente o suficiente para detectá-lo.
- O segmento atual está em negrito e tem uma borda fina de sua cor ao redor. Clique duas vezes no título de um tópico (seu nome) para torná-lo o tópico atual.
- As entradas da pilha de chamadas sem código-fonte – ou seja, não depuráveis sem usar a visualização da CPU – são reduzidas por padrão. Você pode expandi-los (ou desligá-los para mostrar uma pilha de chamadas tradicional).
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:
- Execute apenas este tópico, mantendo todos os outros tópicos em pausa
- Mantenha este tópico em pausa, mas execute todos os outros tópicos
- Entre em um método, apenas neste tópico
- Passe por uma linha de código, apenas neste tópico. Isso permite que apenas este segmento seja executado e executado; nenhum outro tópico pode ser executado ao mesmo tempo
- Executar até o retorno do método, apenas para este segmento
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!
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition