Condiciones previas para interfaces CorDebug.idl
Algunos métodos de las interfaces de depuración requieren, como condición previa, que el proceso que se depura (es decir, el código que está siendo depurado) se encuentre en un estado determinado. La condición previa sólo se aplica a los métodos que sean miembros directos de las interfaces declaradas en el archivo CorDebug.idl. (En otras palabras, solo se aplican a los métodos que no se heredan de IUnknown).
Estado del código que está siendo depurado
El código que se está depurando presenta seis estados de alto nivel, que se describen en las secciones siguientes. Solamente tres de estos estados son válidos: activo, sincronizado y congelado por el sistema operativo.
Activo
Estado válido en el que se encuentra el código que está siendo depurado cuando se está ejecutando. Éste es el estado entre eventos de depuración.
Sincronizado
Estado válido en el que se detiene el código que se está depurando y en el que todos los estados administrados se suspenden. El código que está siendo depurado entra en este estado de una de estas dos maneras:
Durante el intervalo que transcurre entre el envío y la continuación de un evento de depuración administrado. Es el período posterior al envío de un evento de depuración administrado (o nativo dentro de banda), pero anterior a su continuación.
Después de llamar al método ICorDebugController::Stop.
Congelado por el sistema operativo
Estado válido en el que se encuentra el código que está siendo depurado cuando se detiene en un evento de depuración nativo fuera de banda. Este estado sólo es relevante para la depuración de interoperabilidad.
No inicializado
Estado no válido en el que se encuentra el código que está siendo depurado cuando no se ha inicializado. Este estado se da durante el período posterior a la creación del código que se está depurando y anterior al envío de la devolución de llamada ICorDebugManagedCallback::CreateProcess. Si se llama a un método definido en CorDebug.idl durante este estado, puede devolver CORDBG_E_NOTREADY como valor de HRESULT.
Inactivo o desactivado
Estado no válido en el que el código que se está depurando deja de estar disponible para la depuración. Si se llama a un método definido en CorDebug.idl durante este estado, puede devolver varios valores HRESULT, como CORDBG_E_PROCESS_DETACHED o CORDBG_E_PROCESS_TERMINATED.
Error irrecuperable
Estado no válido al que pasa el código que se está depurando cuando se envía la devolución de llamada ICorDebugManagedCallback::DebuggerError. Significa que los servicios de depuración administrados se han dañado de forma significativa y no se pueden utilizar. Si se llama a un método definido en CorDebug.idl durante este estado, puede devolver CORDBG_E_UNRECOVERABLE_ERROR como valor de HRESULT.
Estados requeridos antes de llamar a los métodos
Los métodos miembro de la interfaz ICorDebug no tienen restricciones específicas del estado más allá de sus declaraciones, porque no se mantienen directamente en un objeto de proceso. Los métodos miembro de todas las demás interfaces tienen cierta afinidad específica del proceso. Por lo tanto, estos métodos requieren que el proceso del código que se está depurando se encuentre en uno de estos tres estados al llamarlos: activo, sincronizado o congelado por el sistema operativo.
Se puede llamar a los métodos siguientes cuando el código que está siendo depurado se encuentra en estado activo:
Se puede llamar a los métodos siguientes cuando el código que se está depurando se encuentra congelado por el sistema operativo o sincronizado:
Las llamadas a los demás métodos sólo deberían realizarse cuando el código que está siendo depurado se encuentra en estado sincronizado. De lo contrario, podrían devolver CORDBG_E_PROCESS_NOT_SYNCHRONIZED como valor de HRESULT.
Vea también
Conceptos
Información general sobre la depuración en CLR