SOS.dll (Extensión de depuración de SOS)
La extensión de depuración de SOS (SOS.dll) ayuda a depurar programas administrados en el depurador WinDbg.exe y en Visual Studio al proporcionar información acerca del entorno interno de Common Language Runtime (CLR). Esta herramienta requiere que el proyecto tenga habilitada la depuración no administrada. También puede usar la extensión de depuración de SOS con el depurador de Windows (WinDbg.exe).
Esta herramienta se instala automáticamente con Visual Studio y con el SDK de Windows. Para ejecutar la herramienta, se recomienda usar el símbolo del sistema de Visual Studio o del SDK de Windows (shell de CMD). Estas utilidades permiten ejecutar la herramienta fácilmente, sin navegar a la carpeta de instalación. Para obtener más información, vea Símbolos del sistema del SDK de Windows y Visual Studio.
Si tiene instalado Visual Studio en el equipo: en la barra de tareas, haga clic en Start, All Programs, Visual Studio y Visual Studio Tools y, a continuación, haga clic en Visual Studio Command Prompt.
O bien
Si tiene el SDK de Windows instalado en el equipo: en la barra de tareas, haga clic en Start, All Programs, haga clic en la carpeta del SDK de Windows y, a continuación, haga clic en Command Prompt (o CMD Shell).
En el símbolo del sistema, escriba:
![command] [options]
Comandos
Comando |
Descripción |
---|---|
AnalyzeOOM (ao) |
Muestra la información acerca de los últimos OOM que se produjeron en una solicitud de asignación al montón de recolección de elementos no utilizados. (En recolección de elementos no utilizados del servidor, se muestra OOM, si existe, en cada montón de recolección de elementos no utilizados.) |
BPMD [-nofuturemodule] [<nombre del módulo> <nombre del método>] [-md <MethodDesc>] -list-clear <número de punto de interrupción pendiente> -clearall |
Crea un punto de interrupción en el método especificado en el módulo especificado. Si no se han cargado el módulo y el método especificados, antes de crear un punto de interrupción, este comando espera una notificación de que el módulo se cargó y se compiló Just-In-Time (JIT). Puede administrar la lista de puntos de interrupción pendientes mediante las opciones -list, -clear y -clearall:
|
CLRStack [-a] [-l] [-p] [-n] |
Proporciona una traza de pila solamente del código administrado.
La extensión de depuración de SOS no muestra marcos de transición en plataformas basadas en IA-64 y x64. |
COMState |
Muestra el modelo de apartamento de COM para cada subproceso y un puntero Context, si está disponible. |
DumpArray [-start <índice inicial>] [-length <longitud>] [-details] [-nofields] <dirección del objeto de matriz> O bien DA [-start <índice inicial>] [-length <longitud>] [-detail] [-nofields] dirección del objeto de matriz> |
Examina los elementos de un objeto de matriz.
|
DumpAssembly <dirección del ensamblado> |
Muestra información acerca de un ensamblado. El comando DumpAssembly muestra varios módulos, si existen. Se puede obtener una dirección de ensamblado mediante el comando DumpDomain. |
DumpClass <dirección de EEClass> |
Muestra información acerca de la estructura EEClass asociada a un tipo. El comando DumpClass muestra los valores de campo estático, pero no muestra los valores de campo no estático. Utilice el comando DumpMT, DumpObj, Name2EE o Token2EE para obtener una dirección de estructura EEClass. |
DumpDomain [<dirección del dominio>] |
Enumera cada objeto Assembly que está cargado en la dirección del objeto AppDomain que se ha especificado. Cuando se llama sin parámetros, el comando DumpDomain muestra todos los objetos AppDomain de un proceso. |
DumpHeap [-stat] [-strings] [-short] [-min <tamaño>] [-max <tamaño>] [-thinlock] [-startAtLowerBound] [-mt <dirección de MethodTable>] [-type <nombre de tipo parcial>][inicio []] |
Muestra información acerca del montón del recolector de elementos no utilizados y las estadísticas de recolección de objetos. El comando DumpHeap muestra una advertencia si detecta una fragmentación excesiva en el montón del recolector de elementos no utilizados.
|
DumpIL <objeto DynamicMethod administrado> | <puntero DynamicMethodDesc> | <puntero MethodDesc> |
Muestra el Lenguaje Intermedio de Microsoft (MSIL) que está asociado a un método administrado. Observe que el MSIL dinámico se emite de manera diferente que el MSIL que se carga desde un ensamblado. El MSIL dinámico hace referencia a objetos de una matriz de objetos administrada en lugar de a tokens de metadatos. |
DumpLog [-addr <addressOfStressLog>] [<nombre de archivoe>] |
Escribe el contenido de un registro de carga en memoria en el archivo especificado. Si no se especifica un nombre, este comando crea un archivo denominado StressLog.txt en el directorio actual. El registro de carga en memoria ayuda en el diagnóstico de los errores de carga sin utilizar bloqueos o E/S. Para habilitar el registro de carga, establezca las siguientes claves del Registro bajo HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework: (DWORD) StressLog = 1 (DWORD) LogFacility = 0xffffffff (DWORD) StressLogSize = 65536 La opción -addr opcional permite especificar un registro de carga distinto del registro predeterminado. |
DumpMD <dirección de MethodDesc> |
Muestra información acerca de una estructura MethodDesc en la dirección especificada. Puede utilizar el comando IP2MD para obtener la dirección de la estructura MethodDesc de una función administrada. |
DumpMT [-MD] <dirección de MethodTable> |
Muestra información acerca de una tabla de métodos en la dirección especificada. Al especificar la opción -MD, se muestra una lista de todos los métodos definidos con el objeto. Cada objeto administrado contiene un puntero a tabla de métodos. |
DumpMethodSig <dirección de la firma> <dirección del módulor> |
Muestra información acerca de una estructura MethodSig en la dirección especificada. |
DumpModule [-mt] <dirección del módulo> |
Muestra información acerca de un módulo en la dirección especificada. La opción -mt muestra los tipos definidos en un módulo y los tipos a los que el módulo hace referencia. Puede utilizar el comando DumpDomain o DumpAssembly para recuperar la dirección de un módulo. |
DumpObj [-nofields] <dirección del objeto> O bien DO <dirección del objeto> |
Muestra información acerca de un objeto en la dirección especificada. El comando DumpObj muestra los campos, la información de la estructura EEClass, la tabla de métodos y el tamaño del objeto. Puede utilizar el comando DumpStackObjects para recuperar la dirección de un objeto. Observe que puede ejecutar el comando DumpObj en campos de tipo CLASS, porque también son objetos. La -nofields opción evita que los campos del objeto se muestren, es útil para los objetos como Cadena. |
DumpRuntimeTypes |
Muestra los objetos de tipos en tiempo de ejecución en el montón del recolector de elementos no utilizados y muestra las tablas de métodos y los nombres de tipos asociados. |
DumpStack [-EE] [-n] [top pila [bottom pilak]] |
Muestra una traza de pila.
En las plataformas x86 y x64f, el comando DumpStack crea una traza de pila detallada. En las plataformas basadas en IA-64, el comando DumpStack imita el comportamiento del comando K del depurador. Los parámetros top y bottom se omiten en las plataformas basadas en IA-64. |
DumpSig <dirección de la firma> <dirección del módulo> |
Muestra información acerca de una estructura Sig en la dirección especificada. |
DumpSigElem <dirección de la firma> <dirección del módulo> |
Muestra un elemento único de un objeto de firma. En la mayoría de los casos, debería utilizar DumpSig para examinar los objetos de firma individuales. Sin embargo, si una firma se ha dañado de alguna manera, puede usar DumpSigElem para leer las partes válidas. |
DumpStackObjects [-verify] [top pila [bottom pila]] O bien DSO [-verify] [top pila [bottom pila]] |
Muestra todos los objetos administrados encontrados dentro de los límites de la pila actual. La opción -verify valida cada campo CLASS no estático de un campo de objeto. Utilice el comando DumpStackObject con comandos de traza de pila como el comando K y el comando CLRStack para determinar los valores de parámetros y variables locales. |
DumpVC <dirección de MethodTable> <dirección> |
Muestra información acerca de los campos de una clase de valor en la dirección especificada. El parámetro MethodTable permite que el comando DumpVC interprete los campos correctamente. Las clases de valor no tienen una tabla de métodos como primer campo. |
EEHeap [-gc] [-loader] |
Muestra información acerca de la memoria de proceso utilizada por las estructuras de datos internas de Common Language Runtime. Las opciones -gc y -loader limitan el resultado de este comando a las estructuras de datos del recolector de elementos no utilizados o del cargador. La información para el recolector de elementos no utilizados muestra los intervalos de cada segmento en el montón administrado. Si el puntero pertenece a un intervalo de segmento proporcionado por -gc, es un puntero de objeto. |
EEStack [-short] [-EE] |
Ejecuta el comando DumpStack en todos los subprocesos del proceso. La opción -EE se pasa directamente al comando DumpStack. El parámetro -short limita el resultado a los siguientes tipos de subprocesos:
|
EEVersion |
Muestra la versión de Common Language Runtime. |
EHInfo [<dirección de MethodDesc>] [<dirección del código>] |
Muestra los bloques de control de excepciones en un método especificado. Este comando muestra los desplazamientos y las direcciones de código para el bloque de cláusulas (el bloque try) y el bloque de controladores (el bloque catch). |
FAQ |
Muestra las preguntas más frecuentes |
FinalizeQueue [-detail] | [-allReady] [-short] |
Muestra todos los objetos registrados para su finalización.
|
FindAppDomain <dirección del objeto> |
Determina el dominio de aplicación de un objeto en la dirección especificada. |
FindRoots -gen <N> | -gen any |<dirección del objeto> |
Hace que el depurador interrumpa el código que está siendo depurado en la colección siguiente de la generación especificada. El efecto se restablece tan pronto como se produce la interrupción. Para interrumpir en la colección siguiente, tiene que volver a emitir el comando. El formulario <dirección del objeto > de este comando se usa después de producirse la interrupción provocada por -gen o -gen any. En ese momento, el código que está siendo depurado se encuentra en el estado correcto para que FindRoots identifique las raíces para los objetos de las actuales generaciones inutilizadas. |
GCHandles [-perdomain] |
Muestra estadísticas acerca de los identificadores del recolector de elementos no utilizados del proceso. La opción -perdomain organiza las estadísticas por dominio de aplicación. Utilice el comando GCHandles para encontrar pérdidas de memoria producidas por pérdidas de identificadores del recolector de elementos no utilizados. Una pérdida de memoria se produce, por ejemplo, cuando el código retiene una matriz grande porque un identificador seguro del recolector de elementos no utilizados todavía señala a la misma y el identificador se descarta sin liberarla. |
GCHandleLeaks |
Busca en memoria cualquier referencia a identificadores seguros y anclados del recolector de elementos no utilizados en el proceso y muestra los resultados. Si se encuentra un identificador, el comando GCHandleLeaks muestra la dirección de la referencia. Si no se encuentra un identificador en memoria, este comando muestra una notificación. |
GCInfo <dirección de MethodDesc><dirección del código> |
Muestra datos que indican cuándo los registros o las ubicaciones de la pila contienen objetos administrados. Si se produce una recolección de elementos no utilizados, el recolector debe conocer las ubicaciones de las referencias a los objetos para poder actualizarlas con los nuevos valores de puntero de objeto. |
GCRoot [-nostacks] <dirección del objeto> |
Muestra información acerca de las referencias (o raíces) a un objeto en la dirección especificada. El comando GCRoot busca identificadores dentro de otros objetos e identificadores en la pila en todo el montón administrado y en la tabla de identificadores. Después, se buscan punteros a objetos en cada pila, y también se busca en la cola del finalizador. Este comando no determina si una raíz de la pila es válida o se descarta. Utilice los comandos CLRStack y U para desensamblar el marco al que pertenece el valor de argumento o local para determinar si la raíz de la pila todavía está en uso. La opción -nostacks restringe la búsqueda a objetos alcanzables y a identificadores del recolector de elementos no utilizados. |
GCWhere <dirección del objeto> |
Muestra la ubicación y el tamaño en el montón de recolección de elementos no utilizados del argumento que se ha pasado. Cuando el argumento queda en el montón administrado pero no es una dirección de objeto válida, el tamaño se muestra como 0 (cero). |
help [<comando>] [faq] |
Cuando no se especifica ningún parámetro, muestra todos los comandos disponibles, o bien muestra ayuda detallada acerca del comando especificado. El parámetro faq muestra respuestas a preguntas más frecuentes. |
HeapStat [-inclUnrooted | -iu] |
Muestra los tamaños de generación para cada montón y el espacio disponible total en cada generación de cada montón. Si se especifica la - opcióninclUnrooted, el informe incluye información sobre los objetos administrados del montón de recolección de elementos no utilizados que ya no se arraiga. |
HistClear |
Libera cualquier recurso utilizados por la familia de comandos Hist. Generalmente, no tiene que llamar explícitamente a HistClear, puesto que cada HistInit limpia los recursos anteriores. |
HistInit |
Inicializa las estructuras SOS del registro de carga guardado en el código que está siendo depurado. |
HistObj <obj_address> |
Examina todos los registros de reubicación del registro de esfuerzo y muestra la cadena de reubicaciones de recolección de elementos no utilizados que pueden haber conducido a la dirección que se pasa como un argumento. |
HisttObjFind <obj_address> |
Muestra todas las entradas de registro que hacen referencia a un objeto en la dirección especificada. |
HistRoot <raíz> |
Muestra información relacionada con promociones y reubicaciones de la raíz especificada. El valor de raíz se puede utilizar para realizar el seguimiento del movimiento de un objeto a través de recolecciones de elementos no utilizados. |
IP2MD <dirección del código> |
Muestra la estructura MethodDesc en la dirección especificada en código compilado JIT. |
ListNearObj (lno) <obj_address> |
Muestra los objetos anteriores y posteriores a la dirección especificada. El comando busca la dirección en el montón de recolección de elementos no utilizados que se ve como un principio válido de un objeto administrado (basado en una tabla de método válida) y el objeto que sigue la dirección de argumento. |
MinidumpMode [0] [1] |
Evita que se ejecuten comandos no seguros al utilizar un minivolcado. Pase 0 para deshabilitar esta característica o 1 para habilitarla. De manera predeterminada, el valor de MinidumpMode se encuentra establecido en 0. Los minivolcados creados con el comando .dump /m o .dump tienen datos específicos de CLR limitados y permiten ejecutar sólo un subconjunto de comandos de SOS correctamente. Se pueden producir errores inesperados en algunos comandos porque no se hayan asignado o sólo se hayan asignado parcialmente áreas memoria necesarias. Esta opción evita que ejecute comandos no seguros en minivolcados. |
Name2EE <nombre del módulo> <nombre del tipo o método> O bien Name2EE <nombre del módulo>!<nombre del tipo o método> |
Muestra la estructura MethodTable y la estructura EEClass para el tipo o método especificado en el módulo especificado. El módulo especificado se debe cargar en el proceso. Para obtener el nombre de tipo correcto, examine el módulo mediante el Ildasm.exe (Desensamblador de MSIL). También puede pasar * como parámetro de nombre del módulo para buscar en todos los módulos administrados cargados. El parámetro nombre del módulo también puede ser el nombre del depurador de un módulo, como mscorlib o image00400000. Este comando admite la sintaxis del depurador de Windows <module>!<type>. El nombre del tipo debe ser completo. |
ObjSize [<dirección del objeto>] | [-aggregate] [-stat] |
Muestra el tamaño del objeto especificado. Si no especifica ningún parámetro, el comando ObjSize muestra el tamaño de todos los objetos encontrados en subprocesos administrados, muestra todos los identificadores del recolector de elementos no utilizados en el proceso y suma el tamaño de todos los objetos a los que señalan esos identificadores. El comando ObjSize incluye el tamaño de todos los objetos secundarios y del objeto primario. La opción -aggregate se puede utilizar junto con el argumento -stat para obtener una vista detallada de los tipos que todavía están arraigados. Mediante el uso de !dumpheap -stat y !objsize -aggregate -stat, puede determinar qué objetos ya no se arraigan y diagnostican varios problemas de la memoria. |
PrintException [-nested] [-lines] [<dirección de objeto de excepción>] O bien PE [-nested] [<dirección de objeto de excepción>] |
Muestra y da formato a los campos de cualquier objeto derivado de la clase Exception en la dirección especificada. Si no se especifica una dirección, el comando PrintException muestra la última excepción iniciada en el subproceso actual.
Puede utilizar este comando para dar formato y ver el campo _stackTrace, que es una matriz binaria. |
ProcInfo [-env] [-time] [-mem] |
Muestra las variables de entorno del proceso, el tiempo de CPU del kernel y estadísticas de utilización de memoria. |
RCWCleanupList <dirección de RCWCleanupList> |
Muestra la lista de contenedores invocables en tiempo de ejecución que se encuentran en la dirección especificada y que están en espera de limpieza. |
SaveModule <dirección base> <nombre de archivo> |
Escribe en el archivo especificado una imagen que está cargada en memoria en la dirección especificada. |
SOSFlush |
Vacía una caché SOS interna. |
StopOnException [-derived] [-create | -create2] <Excepción> <número de pseudorregistro> |
Hace que el depurador se detenga si se inicia la excepción especificada, pero sigue ejecutándose si se inician otras excepciones. La opción -derived detecta la excepción especificada y cada excepción que se derive de la misma. |
SyncBlk [-all | <número de syncblk>] |
Muestra la estructura SyncBlock especificada o todas las estructuras SyncBlock. Si no se pasa ningún argumento, el comando SyncBlk muestra la estructura SyncBlock que corresponde a los objetos que pertenecen a un subproceso. Una estructura SyncBlock es un contenedor de información adicional que no es necesario crear para cada objeto. Puede contener datos de interoperabilidad COM, códigos hash e información de bloqueo de operaciones seguras para subprocesos. |
ThreadPool |
Muestra información acerca del grupo de subprocesos administrado, como el número de solicitudes de trabajo en la cola, el número de subprocesos de puerto de finalización y el número de temporizadores. |
Token2EE <nombre del módulo> <token> |
Convierte el símbolo (token) de metadatos especificado en el módulo especificado en una estructura MethodTable o MethodDesc. Puede pasar * para el parámetro de nombre de módulo con el fin de averiguar a qué está asignado ese token en cada módulo administrado cargado. También puede pasar el nombre del depurador para un módulo, como mscorlib o image00400000. |
Threads [-live] [-special] |
Muestra todos los subprocesos administrados del proceso. El comando Threads muestra el identificador abreviado del depurador, el identificador de subproceso de Common Language Runtime y el identificador de subproceso del sistema operativo. Además, el comando Threads muestra una columna Domain en la que se indica el dominio de aplicación donde se ejecuta un subproceso, una columna APT en la que se muestra el modo de apartamento COM, y una columna Exception en la que se muestra la última excepción que se ha producido en el subproceso.
|
ThreadState <Campo de valor de estado> |
Muestra el estado del subproceso. El parámetro value es el valor del campo State en la salida del informe Threads. Ejemplo:
|
TraverseHeap [-xml] <nombre de archivo> |
Escribe información del montón en el archivo especificado, en un formato reconocido por el generador de perfiles de CLR. La opción -xml hace que el comando TraverseHeap dé formato al archivo como XML. EL generador de perfiles de CLR se puede descargar en Microsoft Download Center. |
U [-gcinfo] [-ehinfo] [-n] <dirección de MethodDesc> | <dirección del código> |
Muestra un desensamblado anotado de un método administrado especificado mediante un puntero a la estructura MethodDesc para el método o mediante una dirección de código dentro del cuerpo del método. El comando U muestra todo el método de principio a fin, con las anotaciones que convierten los símbolos (tokens) de metadatos en nombres.
|
VerifyHeap |
Comprueba el montón del recolector de elementos no utilizados en busca de indicios de daño, y muestra los errores encontrados. Los daños del montón pueden ser debidos a llamadas de invocación de plataforma construidas incorrectamente. |
VerifyObj <dirección del objeto> |
Comprueba el objeto que se pasa como un argumento en indicios de daño. |
VMMap |
Recorre el espacio de direcciones virtuales y muestra el tipo de protección aplicado a cada área. |
VMStat |
Proporciona una vista resumida del espacio de direcciones virtuales, ordenada según el tipo de protección que se ha aplicado a esa memoria (libre, reservado, confirmado, privado, asignado, imagen). La columna TOTAL muestra el resultado de multiplicar la columna AVERAGE por la columna BLK COUNT. |
Comentarios
Si desea usar la extensión de depuración de SOS, cárguela en el depurador WinDbg.exe, que también está disponible en el sitio web WDK and Developer Tools, así como en Visual Studio. Puede ejecutar los comandos desde WinDgb.exe o desde la ventana Inmediato de Visual Studio.
La extensión de depuración de SOS permite ver información acerca del código que se ejecuta dentro de Common Language Runtime. Por ejemplo, puede utilizar la extensión de depuración de SOS para mostrar información acerca del montón administrado, buscar daños en el montón, mostrar tipos de datos internos utilizados por el motor en tiempo de ejecución y ver información acerca de todo el código administrado que se ejecuta dentro del motor en tiempo de ejecución.
Cargar la extensión de depuración de SOS
Para cargar la extensión de depuración de SOS en el depurador WinDbg.exe, ejecute el siguiente comando en la herramienta:
.loadby sos clr
Para cargar la extensión de depuración de SOS en Visual Studio, ejecute el siguiente comando en la ventana Inmediato durante la depuración:
.load SOS.dll
Si el comando se ejecuta correctamente, devolverá el siguiente mensaje en la ventana Inmediato:
extension C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll loaded
Para poder cargar la extensión de depuración de SOS, debe habilitar la depuración no administrada en la configuración del proyecto de su solución. Para algunos lenguajes, la depuración no administrada se encuentra deshabilitada de forma predeterminada. Algunas plataformas no permiten la depuración simultánea de código administrado y código no administrado.
Nota |
---|
Para mostrar la ventana Inmediato en Visual Studio, elija Ventanas en el menú Depurar y, a continuación, haga clic en la opción Inmediato.La ventana Inmediato de Visual Studio también se puede abrir presionando CTRL+ALT+I. |
WinDbg.exe y Visual Studio utilizan una versión de SOS.dll que corresponde a la versión de Mscorwks.dll actualmente en uso. En las versiones 1.1 y 2.0 de .NET Framework, SOS.dll se instala en el mismo directorio que Mscorwks.dll. De forma predeterminada, debería utilizar la versión de SOS.dll que coincide con la versión actual de Mscorwks.dll.
Para utilizar un archivo de volcado de memoria creado en otro equipo, asegúrese de que el archivo Mscorwks.dll incluido con esa instalación está en su ruta de acceso de símbolos y cargue la versión correspondiente de SOS.dll.
Para cargar una versión concreta de SOS.dll, escriba el comando siguiente en el Depurador de Windows:
.load <full path to sos.dll>
Ejemplos
El comando siguiente muestra el contenido de una matriz en la dirección 00ad28d0. La presentación empieza en el segundo elemento e incluye cinco elementos.
!dumparray -start 2 -length 5 -detail 00ad28d0
El comando siguiente muestra el contenido de un ensamblado en la dirección 1ca248.
!dumpassembly 1ca248
El comando siguiente muestra información acerca del montón del recolector de elementos no utilizados.
!dumpheap
El comando siguiente escribe el contenido del registro de carga en memoria en un archivo (predeterminado) denominado StressLog.txt en el directorio actual.
!DumpLog
El comando siguiente muestra la estructura MethodDesc en la dirección 902f40.
!dumpmd 902f40
El comando siguiente muestra información acerca de un módulo en la dirección 1caa50.
!dumpmodule 1caa50
El comando siguiente muestra información acerca de un objeto en la dirección a79d40.
!DumpObj a79d40
El comando siguiente muestra los campos de una clase de valor en la dirección 00a79d9c utilizando la tabla de métodos en la dirección 0090320c.
!DumpVC 0090320c 00a79d9c
El comando siguiente muestra la memoria de proceso utilizada por el recolector de elementos no utilizados.
!eeheap -gc
El comando siguiente muestra todos los objetos programados para finalización.
!finalizequeue
El comando siguiente determina el dominio de aplicación de un objeto en la dirección 00a79d98.
!findappdomain 00a79d98
El comando siguiente muestra todos los identificadores del recolector de elementos no utilizados en el proceso actual.
!gcinfo 5b68dbb8
El comando siguiente muestra las estructuras MethodTable y EEClass para el método Main de la clase MainClass en el módulo unittest.exe.
!name2ee unittest.exe MainClass.Main
El comando siguiente muestra información acerca del símbolo (token) de metadatos en la dirección 02000003 en el módulo unittest.exe.
!token2ee unittest.exe 02000003
Vea también
Referencia
Símbolos del sistema del SDK de Windows y Visual Studio
Otros recursos
Herramientas de .NET Framework
Historial de cambios
Fecha |
Historial |
Motivo |
---|---|---|
1 de abril de 2011 |
Se agregó información sobre el uso de los símbolos del sistema de Visual Studio y del SDK de Windows. |
Mejora de la información. |