Pergunta

Eu tenho um aplicativo que gera vários processos filhos. Antes de lançar uma criança, eu criar stdout e stderr alças para um arquivo de log (por exemplo, se eu estou prestes a lançar proca, eu criar alças para logA.log). I definir essas alças nas processos filhos.

Ao olhar com ProcExplorer, eu posso ver que cada processo filho tem alças para cada arquivo de log (assim Proca tem alças para Loga, logb, etc.). Esta é cria problemas posteriores.

Eu quero ser capaz de ver quando Proca cria a alça para logb. Quaisquer ideeas?

Foi útil?

Solução

Uma solução possível pode ser que pega para arquivo são compartilhados entre quaisquer processos filhos beacause eles são criados pelo processo pai.

Essa é a única solução que eu posso ver porque eu não vejo como você pode ter alça multpile (um para cada arquivo de log) em cada criança processos se você projetar para que você só tem uma var para lidar com isso.

Por que não criar seus punhos nos processos filhos? Eu sei que não responde pricesly à pergunta, mas, obviamente, se Proca só precisa as alças para Loga será melhor criar a alça para Loga no processo filho proca.

Outras dicas

Você está perguntando como invadir um depurador quando o processo de criança Proca cria a alça para logb? Eu vou assumir que você está usando o Windows já que você mencionou Process Explorer.

Uma maneira de fazer isso é usar o Image File Execution Options Registro chave para especificar que cada vez procA.exe é iniciado, você deseja iniciar o depurador. Quando o depurador é iniciado, você pode definir um ponto de interrupção no código que cria a alça para logb e deixar que o processo continue. Isso funciona com qualquer depurador (como WinDbg ou NTSD, ou ferramentas de perfil, como AQTime), não apenas Visual Studio.

Outra maneira de fazer isso é para dizer o depurador para anexar a todos os processos filhos. Existem várias maneiras para permitem esse comportamento com WinDbg ou ntsd. Dessa forma, você anexar o depurador para o processo pai, e ele irá auto-anexar ao processo filho proca, e você pode definir um ponto de interrupção no código apropriado.

No entanto, outra maneira é modificar temporariamente o código para gerar uma exceção ponto de interrupção usando o DebugBreak() função quando ele cria a alça para logb, em seguida, anexar um depurador usando a depuração just-in-time. Nota que, se seus punhos do código estruturado exceções sem uma expressão de filtro de exceção (que é uma má idéia), isso não vai funcionar, e pode ter resultados surpreendentes (impasse, de vazamento de memória, etc.).

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