Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
En esta sección, se describen las API de la biblioteca cliente de diagnóstico.
Clase DiagnosticsClient
public sealed class DiagnosticsClient
{
public DiagnosticsClient(int processId);
public EventPipeSession StartEventPipeSession(
IEnumerable<EventPipeProvider> providers,
bool requestRundown = true,
int circularBufferMB = 256);
public EventPipeSession StartEventPipeSession(
EventPipeProvider provider,
bool requestRundown = true,
int circularBufferMB = 256);
public EventPipeSession StartEventPipeSession(
EventPipeSessionConfiguration config);
public Task<EventPipeSession> StartEventPipeSessionAsync(
IEnumerable<EventPipeProvider> providers,
bool requestRundown,
int circularBufferMB = 256,
CancellationToken token = default);
public Task<EventPipeSession> StartEventPipeSessionAsync(
EventPipeProvider provider,
bool requestRundown,
int circularBufferMB = 256,
CancellationToken token = default);
public Task<EventPipeSession> StartEventPipeSessionAsync(
EventPipeSessionConfiguration configuration,
CancellationToken token);
public void WriteDump(
DumpType dumpType,
string dumpPath,
bool logDumpGeneration = false);
public void WriteDump(
DumpType dumpType,
string dumpPath,
WriteDumpFlags flags);
public Task WriteDumpAsync(
DumpType dumpType,
string dumpPath,
bool logDumpGeneration,
CancellationToken token);
public Task WriteDumpAsync(
DumpType dumpType,
string dumpPath,
WriteDumpFlags flags,
CancellationToken token);
public void AttachProfiler(
TimeSpan attachTimeout,
Guid profilerGuid,
string profilerPath,
byte[] additionalData = null);
public void SetStartupProfiler(
Guid profilerGuid,
string profilerPath);
public void ResumeRuntime();
public void SetEnvironmentVariable(
string name,
string value);
public Dictionary<string, string> GetProcessEnvironment();
public void ApplyStartupHook(
string startupHookPath);
public Task ApplyStartupHookAsync(
string startupHookPath,
CancellationToken token);
public void EnablePerfMap(
PerfMapType type);
public void DisablePerfMap();
public static IEnumerable<int> GetPublishedProcesses();
}
Constructor
public DiagnosticsClient(int processId);
Crea una instancia de DiagnosticsClient para un proceso de .NET compatible que se ejecuta con el identificador de proceso de processId.
processID: identificador de proceso de la aplicación de destino.
Métodos StartEventPipeSession
public EventPipeSession StartEventPipeSession(
IEnumerable<EventPipeProvider> providers,
bool requestRundown = true,
int circularBufferMB = 256);
public Task<EventPipeSession> StartEventPipeSessionAsync(
IEnumerable<EventPipeProvider> providers,
bool requestRundown,
int circularBufferMB = 256,
CancellationToken token = default);
Inicia una sesión de seguimiento de EventPipe con los proveedores y la configuración proporcionados.
-
providers: un elementoIEnumerabledeEventPipeProviderpara iniciar el seguimiento. -
requestRundown: un valorboolque especifica si se deben solicitar eventos del proveedor de detención del entorno de ejecución de la aplicación de destino. -
circularBufferMB: un elementointque especifica el tamaño total del búfer circular utilizado por el entorno de ejecución de la aplicación de destino al recopilar eventos. -
token(para la sobrecarga asincrónica): token que se va a supervisar para las solicitudes de cancelación.
public EventPipeSession StartEventPipeSession(
EventPipeProvider provider,
bool requestRundown = true,
int circularBufferMB = 256);
public Task<EventPipeSession> StartEventPipeSessionAsync(
EventPipeProvider provider,
bool requestRundown,
int circularBufferMB = 256,
CancellationToken token = default);
Inicia una sesión de seguimiento de EventPipe mediante un único proveedor.
-
provider: una claseEventPipeProviderpara iniciar el seguimiento. -
requestRundown: un valorboolque especifica si se deben solicitar eventos del proveedor de detención del entorno de ejecución de la aplicación de destino. -
circularBufferMB: un elementointque especifica el tamaño total del búfer circular utilizado por el entorno de ejecución de la aplicación de destino al recopilar eventos. -
token(para la sobrecarga asincrónica): token que se va a supervisar para las solicitudes de cancelación.
public EventPipeSession StartEventPipeSession(
EventPipeSessionConfiguration config);
public Task<EventPipeSession> StartEventPipeSessionAsync(
EventPipeSessionConfiguration configuration,
CancellationToken token);
Inicia una sesión de seguimiento de EventPipe mediante .EventPipeSessionConfiguration
-
config/configuration: queEventPipeSessionConfigurationdefine la sesión. -
token(para la sobrecarga asincrónica): token que se va a supervisar para las solicitudes de cancelación.
Nota:
Los eventos de detención contienen cargas que pueden ser necesarias para el análisis posterior, como la resolución de nombres de método de ejemplos de subprocesos. A menos que sepa que no quiere esto, se recomienda establecer requestRundown en true. En aplicaciones de gran tamaño, esto puede tardar un tiempo.
Método WriteDump
public void WriteDump(
DumpType dumpType,
string dumpPath,
bool logDumpGeneration=false);
Solicite un volcado de memoria para la depuración final de la aplicación de destino. El tipo del volcado de memoria se puede especificar mediante la enumeración DumpType
-
dumpType: tipo del volcado de memoria que se va a solicitar. -
dumpPath: ruta de acceso al volcado de memoria en el que se va a escribir. -
logDumpGeneration: si se establece entrue, la aplicación de destino escribirá los registros de diagnóstico durante la generación del volcado.
public void WriteDump(
DumpType dumpType,
string dumpPath,
WriteDumpFlags flags)
Solicite un volcado de memoria para la depuración final de la aplicación de destino. El tipo del volcado de memoria se puede especificar mediante la enumeración DumpType
-
dumpType: tipo del volcado de memoria que se va a solicitar. -
dumpPath: ruta de acceso al volcado de memoria en el que se va a escribir. -
flags: marcas de registro e informe de bloqueo. En los entornos de ejecución anteriores a la versión 6.0, solo se admite LoggingEnabled.
public Task WriteDumpAsync(
DumpType dumpType,
string dumpPath,
bool logDumpGeneration,
CancellationToken token)
Solicite un volcado de memoria para la depuración final de la aplicación de destino. El tipo del volcado de memoria se puede especificar mediante la enumeración DumpType
-
dumpType: tipo del volcado de memoria que se va a solicitar. -
dumpPath: ruta de acceso al volcado de memoria en el que se va a escribir. -
logDumpGeneration: si se establece entrue, la aplicación de destino escribirá los registros de diagnóstico durante la generación del volcado. -
token: token para supervisar las solicitudes de cancelación.
public Task WriteDumpAsync(
DumpType dumpType,
string dumpPath,
WriteDumpFlags flags,
CancellationToken token)
Solicite un volcado de memoria para la depuración final de la aplicación de destino. El tipo del volcado de memoria se puede especificar mediante la enumeración DumpType
-
dumpType: tipo del volcado de memoria que se va a solicitar. -
dumpPath: ruta de acceso al volcado de memoria en el que se va a escribir. -
flags: marcas de registro e informe de bloqueo. En los entornos de ejecución anteriores a la versión 6.0, solo se admite LoggingEnabled. -
token: token para supervisar las solicitudes de cancelación.
Métodos ApplyStartupHook
public void ApplyStartupHook(
string startupHookPath);
public Task ApplyStartupHookAsync(
string startupHookPath,
CancellationToken token);
Carga el ensamblado especificado con en StartupHook el proceso de destino.
-
startupHookPath: ruta de acceso al ensamblado que contiene el enlace de inicio. -
token(para la sobrecarga asincrónica): token que se va a supervisar para las solicitudes de cancelación.
Métodos perfMap
public void EnablePerfMap(
PerfMapType type);
public void DisablePerfMap();
Controla la generación de asignaciones de rendimiento en el proceso de destino.
-
typePerfMapType: que indica el tipo de asignación de rendimiento que se va a habilitar.
Método AttachProfiler
public void AttachProfiler(
TimeSpan attachTimeout,
Guid profilerGuid,
string profilerPath,
byte[] additionalData=null);
Solicitud para adjuntar una interfaz ICorProfiler a la aplicación de destino.
-
attachTimeout: un elementoTimeSpandespués del cual se anulará la conexión. -
profilerGuid:Guidde la interfaz ICorProfiler que se va a adjuntar. -
profilerPath: ruta de acceso al archivo dll de la interfaz ICorProfiler que se va a conectar. -
additionalData: datos adicionales opcionales que se pueden pasar al entorno de ejecución durante la conexión del generador de perfiles.
Método SetStartupProfiler
public void SetStartupProfiler(
Guid profilerGuid,
string profilerPath);
Establezca un generador de perfiles como generador de perfiles de inicio. Solo es válido emitir este comando cuando el entorno de ejecución se pausa durante el inicio.
-
profilerGuid:Guidpara que se asocie el generador de perfiles. -
profilerPath: ruta de acceso al generador de perfiles que se va a asociar.
Método ResumeRuntime
public void ResumeRuntime();
Indique al entorno de ejecución que reanude la ejecución después de pausarse al inicio.
Método SetEnvironmentVariable
public void SetEnvironmentVariable(
string name,
string value);
Establezca una variable de entorno en el proceso de destino.
-
name: el nombre de la variable de entorno que se va a establecer. -
value: el valor de la variable de entorno que se va a establecer.
GetProcessEnvironment
public Dictionary<string, string> GetProcessEnvironment()
Obtiene todas las variables de entorno y sus valores correspondientes del proceso de destino.
Método GetPublishedProcesses
public static IEnumerable<int> GetPublishedProcesses();
Obtenga una interfaz IEnumerable de los identificadores de proceso de todos los procesos de .NET activos a los que se puede conectar.
Clase EventPipeSessionConfiguration
public sealed class EventPipeSessionConfiguration
{
public EventPipeSessionConfiguration(
IEnumerable<EventPipeProvider> providers,
int circularBufferSizeMB = 256,
bool requestRundown = true,
bool requestStackwalk = true);
public EventPipeSessionConfiguration(
IEnumerable<EventPipeProvider> providers,
int circularBufferSizeMB,
long rundownKeyword,
bool requestStackwalk = true);
public EventPipeSessionConfiguration(
IEnumerable<EventPipeProvider> providers,
int circularBufferSizeMB,
long rundownKeyword,
bool requestStackwalk,
EventPipeBufferingMode bufferingMode);
public bool RequestRundown { get; }
public int CircularBufferSizeInMB { get; }
public bool RequestStackwalk { get; }
public long RundownKeyword { get; }
public EventPipeBufferingMode BufferingMode { get; }
public IReadOnlyCollection<EventPipeProvider> Providers { get; }
}
Representa la configuración de un EventPipeSessionobjeto .
-
providers: deIEnumerableEventPipeProviders que se va a habilitar. -
circularBufferSizeMB: el tamaño en MB del búfer del entorno de ejecución para recopilar eventos. -
requestRundown: sitruees , solicite eventos de ejecución desde el tiempo de ejecución. -
requestStackwalk: sitruees , registre un seguimiento de pila para cada evento emitido. -
rundownKeyword: la máscara de palabra clave que se usa para los eventos de detención. -
bufferingMode: paraEventPipeBufferingModela sesión. UseBlockpara solicitar una colección que no sea de pérdida. PasarBlockrequiere un entorno de ejecución de destino de .NET 11+; en un entorno de ejecución anterior,StartEventPipeSessionproduceUnsupportedCommandException.
La BufferingMode propiedad devuelve el modo de almacenamiento en búfer de la sesión. El valor predeterminado, Drop, mantiene el búfer de pérdida del tiempo de ejecución.
Clase EventPipeProvider
public class EventPipeProvider
{
public EventPipeProvider(
string name,
EventLevel eventLevel,
long keywords = 0,
IDictionary<string, string> arguments = null)
public EventPipeProvider(
string name,
EventLevel eventLevel,
long keywords,
IDictionary<string, string> arguments,
EventPipeProviderEventFilter eventFilter)
public string Name { get; }
public EventLevel EventLevel { get; }
public long Keywords { get; }
public IDictionary<string, string> Arguments { get; }
public EventPipeProviderEventFilter EventFilter { get; }
public override string ToString();
public override bool Equals(object obj);
public override int GetHashCode();
public static bool operator ==(Provider left, Provider right);
public static bool operator !=(Provider left, Provider right);
}
Constructor
public EventPipeProvider(
string name,
EventLevel eventLevel,
long keywords = 0,
IDictionary<string, string> arguments = null)
public EventPipeProvider(
string name,
EventLevel eventLevel,
long keywords,
IDictionary<string, string> arguments,
EventPipeProviderEventFilter eventFilter)
Crea una instancia de EventPipeProvider con el nombre de proveedor, la enumeración EventLevel, las palabras claves y los argumentos especificados. La segunda sobrecarga también toma un EventPipeProviderEventFilter que filtra qué identificadores de evento habilita el tiempo de ejecución para el proveedor. Al establecer un filtro de eventos, la sesión requiere un entorno de ejecución de destino de más de 10 .NET.
Name (propiedad)
public string Name { get; }
Obtiene el nombre del proveedor.
Propiedad EventLevel
public EventLevel EventLevel { get; }
Obtiene el valor EventLevel de la instancia de EventPipeProvider especificada.
Propiedad Keywords
public long Keywords { get; }
Obtiene un valor que representa la máscara de bits para las palabras clave de EventSource.
Arguments (propiedad)
public IDictionary<string, string> Arguments { get; }
Obtiene un valor IDictionary de cadenas de par clave-valor que representan los argumentos opcionales que se van a pasar a EventSource para representar el elemento EventPipeProvider especificado.
Propiedad EventFilter
public EventPipeProviderEventFilter EventFilter { get; }
Obtiene la opción que EventPipeProviderEventFilter el tiempo de ejecución se aplica a los identificadores de evento de este proveedor después de la palabra clave y el filtro de nivel. Cuando el valor es null, el tiempo de ejecución habilita todos los identificadores de evento que permite la palabra clave y el filtro de nivel.
Observaciones
Esta clase es inmutable, porque EventPipe no permite modificar la configuración de un proveedor durante una sesión de EventPipe a partir de .NET Core 3.1.
Clase EventPipeProviderEventFilter
public sealed class EventPipeProviderEventFilter
{
public EventPipeProviderEventFilter(
bool enable,
IReadOnlyList<uint> eventIds);
public bool Enable { get; }
public IReadOnlyList<uint> EventIds { get; }
}
Representa un filtro opcional por proveedor en identificadores de evento. El tiempo de ejecución aplica el filtro después de la palabra clave y el filtro de nivel del asociado EventPipeProvider. Los filtros de eventos requieren un entorno de ejecución de destino de más de 10 .NET.
Constructor
public EventPipeProviderEventFilter(
bool enable,
IReadOnlyList<uint> eventIds);
Crea una nueva instancia de EventPipeProviderEventFilter.
-
enable: sitruees ,eventIdses una lista de permitidos y el tiempo de ejecución solo habilita esos identificadores de evento. Sifalsees ,eventIdses una lista de denegación y el tiempo de ejecución habilita todos los identificadores de evento, excepto los enumerados. Por lo tanto, una lista de denegación vacía habilita todos los eventos. -
eventIds: identificadores de evento para habilitar o deshabilitar, según lo determinado porenable.
Habilitar propiedad
public bool Enable { get; }
Obtiene un valor que indica si EventIds es una lista de permitidos (true) o una lista de denegación (false).
EventIds (propiedad)
public IReadOnlyList<uint> EventIds { get; }
Obtiene la lista de identificadores de evento que el filtro habilita o deshabilita.
Clase EventPipeSession
public class EventPipeSession : IDisposable
{
public Stream EventStream { get; }
public void Stop();
public Task StopAsync(
CancellationToken cancellationToken);
public void Dispose();
}
Esta clase representa una sesión de EventPipe en curso. Es inmutable y actúa como un identificador para una sesión de EventPipe del entorno de ejecución especificado.
Propiedad EventStream
public Stream EventStream { get; }
Obtiene un valor Stream que se puede usar para leer el flujo de eventos.
Métodos stop
public void Stop();
public Task StopAsync(
CancellationToken cancellationToken);
Detiene la sesión de EventPipe especificada.
-
cancellationToken(para la sobrecarga asincrónica): token que se va a supervisar para las solicitudes de cancelación.
Dispose (método)
public void Dispose();
Libera los recursos asociados a .EventPipeSession
Clase DiagnosticsClientConnector
public sealed class DiagnosticsClientConnector : IAsyncDisposable
{
public DiagnosticsClient Instance { get; }
public ValueTask DisposeAsync();
public static Task<DiagnosticsClientConnector> FromDiagnosticPort(
string diagnosticPort,
CancellationToken ct);
}
Representa un asistente que crea a DiagnosticsClient partir de un puerto de diagnóstico y administra la duración de la conexión del servidor de diagnóstico subyacente.
-
Instance: elDiagnosticsClientobjeto conectado al entorno de ejecución de destino. -
DisposeAsync: elimina el servidor o la conexión subyacentes de forma asincrónica. -
FromDiagnosticPort: crea un nuevoDiagnosticsClientConnectora partir del puerto de diagnóstico especificado.
public static Task<DiagnosticsClientConnector> FromDiagnosticPort(
string diagnosticPort,
CancellationToken ct)
-
diagnosticPort: cadena de puerto de diagnóstico (por ejemplo, un puerto de escucha o conexión) a través de la que se va a conectar. -
ct: token para supervisar las solicitudes de cancelación.
Enumeración DumpType
public enum DumpType
{
Normal = 1,
WithHeap = 2,
Triage = 3,
Full = 4
}
Representa el tipo de volcado de memoria que se puede solicitar.
-
Normal: incluya solo la información necesaria para capturar los seguimientos de la pila para todos los seguimientos y los subprocesos existentes en un proceso. Información y memoria del montón de GC limitadas. -
WithHeap: incluya la información y los montones de GC necesarios para capturar seguimientos de la pila para todos los subprocesos existentes en un proceso. -
Triage: incluya solo la información necesaria para capturar los seguimientos de la pila para todos los seguimientos y los subprocesos existentes en un proceso. Información y memoria del montón de GC limitadas. Se censurará parte del contenido que se sabe que contiene información potencialmente confidencial, como rutas de acceso de módulo completas. Aunque esto está pensado para mitigar algunos casos de exposición de datos confidenciales, no hay ninguna garantía de que esta característica de reacción por sí sola sea suficiente para cumplir con cualquier ley o norma concreta con respecto a la privacidad de los datos. -
Full: incluya toda la memoria accesible en el proceso. Los datos de memoria sin procesar se incluyen al final, de modo que las estructuras iniciales se pueden asignar directamente sin la información de memoria sin procesar. Esta opción puede dar lugar a un archivo de volcado de memoria muy grande.
Enumeración WriteDumpFlags
public enum WriteDumpFlags
{
None = 0x00,
LoggingEnabled = 0x01,
VerboseLoggingEnabled = 0x02,
CrashReportEnabled = 0x04
}
Representa opciones adicionales que se pueden especificar al solicitar un volcado de memoria.
-
None: no hay ningún comportamiento adicional. -
LoggingEnabled: habilite el registro básico durante la generación de volcados de memoria. -
VerboseLoggingEnabled: habilite el registro detallado durante la generación de volcados de memoria. -
CrashReportEnabled: habilite la generación de un informe de bloqueo.
Enumeración PerfMapType
public enum PerfMapType
{
None = 0,
All = 1,
JitDump = 2,
PerfMap = 3
}
Representa el tipo de comportamiento del mapa de rendimiento que se puede habilitar.
-
None: no hay salida de mapa de rendimiento. -
All: habilite todas las salidas de mapa de rendimiento compatibles con el tiempo de ejecución. -
JitDump: habilite la salida del mapa de perf de volcado JIT. -
PerfMap: habilite la salida tradicional del mapa de rendimiento.
Enumeración EventPipeBufferingMode
public enum EventPipeBufferingMode
{
Drop = 0,
Block = 1
}
Controla cómo se comporta el búfer de eventos por sesión del runtime cuando se rellena más rápido que la sesión lo purga.
-
Drop: valor predeterminado del entorno de ejecución. La sesión usa un búfer que quita eventos cuando se desborda, por lo que la recopilación se pierde. -
Block: colección sin pérdida. El tiempo de ejecución bloquea los productores de eventos cuando el búfer está lleno en lugar de quitar eventos. Úselo para colecciones que deben completarse, como una instantánea del montón en un montón grande.Blockno es una pérdida solo hasta la capacidad del búfer, no contra el agotamiento de memoria del host: si el tiempo de ejecución no puede asignar la memoria que necesita para reservar espacio de búfer o durante el apagado de la sesión, quita el evento en lugar de bloquear.Blockrequiere un entorno de ejecución de destino de .NET 11+ ; en un entorno de ejecución anterior, al iniciar la sesión se produceUnsupportedCommandException.
Excepciones
Las excepciones que se inician desde la biblioteca son de tipo DiagnosticsClientException o un tipo derivado.
public class DiagnosticsClientException : Exception
UnsupportedProtocolException
public class UnsupportedProtocolException : DiagnosticsClientException
Esto se puede producir cuando el entorno de ejecución del proceso de destino no es compatible con el protocolo IPC de diagnóstico usado por la biblioteca.
ServerNotAvailableException
public class ServerNotAvailableException : DiagnosticsClientException
Esto se puede producir cuando el entorno de ejecución no está disponible para los comandos IPC de diagnóstico, como al principio del inicio del entorno de ejecución antes de que el entorno de ejecución esté listo para los comandos de diagnóstico, o cuando el entorno de ejecución se está apagando.
ServerErrorException
public class ServerErrorException : DiagnosticsClientException
Esto se puede producir cuando el entorno de ejecución responde con un error a un comando determinado.
UnsupportedCommandException
public class UnsupportedCommandException : ServerErrorException
Esta excepción se produce cuando el comando no es compatible con la biblioteca o el tiempo de ejecución del proceso de destino.
ProfilerAlreadyActiveException
public class ProfilerAlreadyActiveException : ServerErrorException
Esta excepción se produce cuando ya se carga un generador de perfiles en el tiempo de ejecución de destino y se intenta realizar otra asociación.
BadEncodingException
public class BadEncodingException : ServerErrorException
Esta excepción se produce cuando el tiempo de ejecución de destino no puede descodificar la carga del comando y la rechaza. Desde un cliente bien formado, normalmente significa que el tiempo de ejecución es demasiado antiguo para comprender un valor de opción configurado más reciente, por lo que rechaza la solicitud al analizar.