Aqui está o comando listando as alças selecionadas (substitua terminal.exe
pelo nome do aplicativo):
$ winedbg --command "info wnd" | grep -wf <(winedbg --command "info threads" | ex +"/terminal.exe\n\zs/;,/^\S/-p" -scq! /dev/stdin | awk '{print $1}' )
Basicamente, estamos grep
da lista de todos os manipuladores de janela ( info wnd
) por lista específica de threads. A lista é analisada pelo editor ex
com base na saída info threads
e salva em um arquivo especial ( /dev/fd
) que é carregado por grep
( -f
). O comando Awk é usado para imprimir a primeira coluna onde os ids de thread estão listados.
Explicação da sintaxe ex
usada:
-
+"cmd"
- executa o comando -
/terminal.exe\n\zs/;,/^\S/-p
-
/pattern1/;,/pattern2/
- uma pesquisa de intervalo (;
coloca o cursor após o primeiro padrão) -
/terminal.exe\n\zs/
- procureterminal.exe
e marque o ponto inicial (\zs
) -
/^\S/
- a seleção termina na primeira linha não em branco -
-p
- imprime a seleção acima, menos uma linha (relacionado post ) -
-scq!
- s forçosa e forçosamente (!
) executa o q uit c ommand -
/dev/stdin
- leia o conteúdo da entrada padrão
-