Pergunta

Estou usando o VS2010 Beta 2 para depurar algum código multithread. Amor pilhas paralelas, etc.

No entanto, tenho uma pergunta: tenho um ponto de interrupção em um método que pode ser chamado por vários threads. Depois de atingir o ponto de interrupção, eu realmente quero manter o foco no encadeamento que acionou o ponto de interrupção. No entanto, quando eu bati no "Etapa", o VS geralmente muda para outro segmento (digamos que eu parei no thread 1, mas, enquanto isso, o Thread 2 acerta meu ponto de interrupção).

Eu sei que posso congelar manualmente threads na janela da linha. Existe uma maneira de fazê-lo automaticamente-basicamente, depois de acertar um ponto de interrupção, congele todos os threads, exceto o atual até que eu atinja o F-5?

Foi útil?

Solução

Não que eu esteja ciente, no entanto, você pode desativar seu ponto de interrupção enquanto está passando.

Quando estou preocupado em confundir muitos threads, tendem a manter a janela de threads aberta e manter uma nota dos IDs do thread.

Outras dicas

Acabei de lançar uma extensão do Visual Studio 2010 que faz exatamente o que você está procurando. E é grátis :).

Apresentação

Essa extensão do Visual Studio 2010 adiciona dois atalhos e botões da barra de ferramentas para permitir que os desenvolvedores se concentrem facilmente em threads únicos, enquanto depra aplicativos com vários threads.

Reduz drasticamente a necessidade de entrar manualmente na janela Threads para congelar/descongelar todos os threads, mas o que precisa ser seguido e, portanto, ajuda a melhorar a produtividade.

Características

Restringir a execução adicional apenas ao encadeamento atual. Congelará todos os outros threads. Atalho: Ctrl+T+T ou botão de floco de neve. Alterne para o próximo thread único (com base no ID). Alterará o encadeamento atual e congelará todos os outros threads. Atalho: Ctrl+T+J ou o próximo botão.

Confira Aqui na galeria, no Página Oficial ou o Repositório CodePlex.

Se você carregar a janela Threads de Debug-> Windows-> Threads .. Depois de atingir um ponto de interrupção, você poderá selecionar todos os threads e clicar em "Freeze Threads". ".

Isso permitirá que apenas o encadeamento atual seja executado no depurador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top