Pergunta

Quando eu uso !htrace -diff no WinDbg para depurar um vazamento de identificador, recebo muitos identificadores (provavelmente aqueles que estão vazando) que não mostram uma pilha de chamadas:

Qual poderia ser a razão para isso e quais opções tenho para depurar ainda mais?

Handle = 0x000273e4 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273e0 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273dc - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273d8 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273d4 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273d0 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273cc - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273c8 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273c4 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273c0 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273bc - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273b8 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273b4 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273b0 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273ac - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273a8 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273a4 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------

Atualizar:O vazamento do identificador parece depender dos drivers gráficos ou das placas gráficas.Ele começa a vazar quando eu uso qualquer forma de WPF, ele só vaza em alguns sistemas Windows XP com determinadas placas/drivers gráficos.

Foi útil?

Solução

As chamadas são executadas no modo kernel pela rotina ZwOpenProcess (http://msdn.microsoft.com/en-us/library/windows/hardware/ff567022(v=vs.85).aspx) e não seguidas por uma chamada ZwClose.Então a alça vaza.Você não vê as pilhas de chamadas porque elas só estão disponíveis quando as chamadas são executadas no modo de usuário (OpenProcess/CloseHandle).

Em um XP SP3, parece difícil encontrar o culpado.A solução seria usar a funcionalidade 'Rastreamento de referência de objeto' incorporada no sistema operacional, mas esse caminho está repleto de problemas (consulte http://www.osronline.com/showthread.cfm?link=198302 para mais referências).Como você descobriu que esse problema ocorre apenas quando uma placa de vídeo específica está presente, você pode tentar entrar em contato com o fornecedor ou verificar se há uma versão mais recente do driver.

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