Compartir a través de


Depuración de un error de User-Mode con KD

Para depurar correctamente los errores en modo de usuario, necesita CDB o WinDbg. Sin embargo, a veces una excepción en modo de usuario se dividirá en KD porque no hay ningún depurador en modo de usuario presente. También hay ocasiones en las que resulta útil supervisar qué procesos específicos del modo de usuario están haciendo durante la depuración de un problema en modo kernel.

De forma predeterminada, el depurador de kernel intenta cargar el primer símbolo en modo de usuario que coincide con la dirección especificada (para un comando k, u o ln ).

Desafortunadamente, los símbolos en modo de usuario a menudo no se especifican en la ruta de acceso del símbolo o el primer símbolo no es el correcto. Si los símbolos no están allí, cópielos en la ruta de acceso del símbolo o use un comando .simpat (Establecer ruta de acceso de símbolos) para apuntar al árbol de símbolos completo y, a continuación, use el comando .reload (Módulo de recarga). Si se carga el símbolo incorrecto, puede cargar explícitamente un símbolo haciendo una .reload <binary.ext>.

La mayoría de los archivos DLL de Windows se vuelven a base, por lo que se cargan en direcciones diferentes, pero hay excepciones. Los adaptadores de vídeo son las excepciones más comunes. Hay docenas de adaptadores de vídeo que se cargan en la misma dirección base, por lo que KD casi siempre encontrará ati.dll (el primer símbolo de vídeo, alfabéticamente). En el caso del vídeo, también hay un archivo .sys cargado que se puede identificar mediante el comando lm . Con esa información, puede emitir una .reload para obtener los archivos DLL de vídeo correctos. También hay ocasiones en las que el depurador se confunde y la recarga de símbolos específicos le ayudarán a proporcionar la pila correcta. Desembaja las funciones para ver si los símbolos son correctos.

Al igual que los archivos DLL de vídeo, casi todos los archivos ejecutables se cargan en la misma dirección, por lo que KD notificará el acceso. Si ve un seguimiento de pila en el acceso, realice un proceso ! y, a continuación, realice una recarga del nombre ejecutable especificado. Si el ejecutable no tiene símbolos en la ruta de acceso del símbolo, cópielos allí y vuelva a cargar el archivo .reload .

A veces, KD o WinDbg tienen problemas para cargar los símbolos correctos en modo de usuario, incluso cuando el árbol de símbolos completo está en la ruta de acceso del símbolo. En este caso, ntdll.dll y kernel32.dll son dos de los símbolos más comunes que serían necesarios. En el caso de depurar CSRSS desde KD, winsrv.dll y csrsrv.dll también son archivos DLL comunes para cargar.