MDbg.exe (depurador de línea de comandos .NET Framework)MDbg.exe (.NET Framework Command-Line Debugger)

El Depurador de la línea de comandos de .NET Framework ayuda a los proveedores de herramientas y a los programadores de aplicaciones a encontrar y a corregir los errores que pueden producirse en programas orientados al Common Language Runtime de .NET Framework.The NET Framework Command-Line Debugger helps tools vendors and application developers find and fix bugs in programs that target the .NET Framework common language runtime. Esta herramienta utiliza el runtime de la API de depuración para proporcionar servicios de depuración.This tool uses the runtime debugging API to provide debugging services. Puede utilizar MDbg.exe para depurar solo código administrado; no se admite la depuración de código no administrado.You can use MDbg.exe to debug only managed code; there is no support for debugging unmanaged code.

Esta herramienta está disponible mediante NuGet.This tool is available through NuGet. Para obtener información de instalación, vea MDbg 0.1.0.For installation information, see MDbg 0.1.0. Para ejecutar la herramienta, use la Consola del Administrador de paquetes.To run the tool, use the Package Manager Console. Para más información sobre cómo usar la Consola del Administrador de paquetes, vea el artículo Package Manager Console (Consola del Administrador de paquetes).For more information about how to use the Package Manager Console, see the Package Manager Console article.

A petición del Administrador de paquetes, escriba lo siguiente:At the Package Manager prompt, type the following:

SintaxisSyntax

MDbg [ProgramName[arguments]] [options]  

ComandosCommands

En el depurador (según lo indicado en el símbolo del sistema mdbg>), escriba uno de los comandos descritos en la sección siguiente:When you are in the debugger (as indicated by the mdbg> prompt), type one of the commands described in the next section:

command [arguments]command [arguments]

Los comandos de MDbg.exe distinguen mayúsculas de minúsculas.MDbg.exe commands are case-sensitive.

ComandoCommand DescripciónDescription
ap[rocess] [number]ap[rocess] [number] Cambia a otro proceso depurado o imprime los procesos disponibles.Switches to another debugged process or prints available processes. Los números no son identificadores de proceso reales (PID), sino una lista indizada por 0.The numbers are not real process IDs (PIDs), but a 0-indexed list.
a[ttach] [pid]a[ttach] [pid] Asocia a un proceso o imprime los procesos disponibles.Attaches to a process or prints available processes.
b[reak] [ClassName.Method | FileName:LineNo]b[reak] [ClassName.Method | FileName:LineNo] Establece un punto de interrupción en el método especificado.Sets a breakpoint at the specified method. Los módulos se examinan secuencialmente.Modules are scanned sequentially.

- break FileName:LineNo establece un punto de interrupción en una ubicación del origen.- break FileName:LineNo sets a breakpoint at a location in the source.
- break ~number establece un punto de interrupción en un símbolo mostrado recientemente con el comando x.- break ~number sets a breakpoint on a symbol recently displayed with the x command.
- break module!ClassName.Method+IlOffset establece un punto de interrupción en la ubicación completa.- break module!ClassName.Method+IlOffset sets a breakpoint on the fully qualified location.
block[ingObjects]block[ingObjects] Muestra bloqueos del monitor, que son subprocesos de bloqueo.Displays monitor locks, which are blocking threads.
ca[tch] [exceptionType]ca[tch] [exceptionType] Hace que el depurador se interrumpa en todas las excepciones, no solo en las excepciones no controladas.Causes the debugger to break on all exceptions, and not just on the unhandled exceptions.
cl[earException]cl[earException] Marca la excepción actual como controlada para que la ejecución pueda continuar.Marks the current exception as handled so that execution can continue. Si la causa de la excepción no se ha controlado, la excepción se puede volver a iniciar rápidamente.If the cause of the exception has not been dealt with, the exception may be quickly rethrown.
conf[ig] [option value]conf[ig] [option value] Muestra todas las opciones que se pueden configurar y cómo se invocan las opciones sin ningún valor opcional.Displays all configurable options and shows how the options are invoked without any optional values. Si se especifica la opción, se establece value como la opción actual.If the option is specified, sets value as the current option. Actualmente, están disponibles las siguientes opciones:The following options are currently available:

- extpath establece la ruta de acceso para buscar extensiones cuando se usa el comando load.- extpath sets the path to search for extensions when the load command is used.
- extpath+ agrega una ruta de acceso para cargar extensiones.- extpath+ adds a path for loading extensions.
del[ete]del[ete] Elimina un punto de interrupción.Deletes a breakpoint.
de[tach]de[tach] Desasocia de un proceso depurado.Detaches from a debugged process.
d[own] [frames]d[own] [frames] Mueve el marco de pila activo hacia abajo.Moves the active stack frame down.
echoecho Repite un mensaje en la consola.Echoes a message to the console.
enableNotif[ication] typeName 0|1enableNotif[ication] typeName 0|1 Habilita (1) o deshabilita (0) notificaciones personalizadas para el tipo especificado.Enables (1) or disables (0) custom notifications for the specified type.
ex[it] [exitcode]ex[it] [exitcode] Sale del shell de MDbg.exe y especifica opcionalmente el código de salida de proceso.Exits the MDbg.exe shell, and optionally specifies the process exit code.
fo[reach] [OtherCommand]fo[reach] [OtherCommand] Ejecuta un comando en todos los subprocesos.Performs a command on all threads. OtherCommand es un comando válido que funciona en un subproceso; foreach OtherCommand ejecuta el mismo comando en todos los subprocesos.OtherCommand is a valid command that operates on one thread; foreach OtherCommand performs the same command on all threads.
f[unceval] [-ad Num] functionName [args ... ]f[unceval] [-ad Num] functionName [args ... ] Realiza una evaluación de función en el subproceso activo actual donde la función que se va a evaluar es functionName.Performs a function evaluation on the current active thread where the function to evaluate is functionName. El nombre de la función debe estar completo, incluidos los espacios de nombres.The function name must be fully qualified, including namespaces.

La opción -ad especifica el dominio de aplicación que se utiliza para resolver la función.The -ad option specifies the application domain to use to resolve the function. Si no se especifica la opción -ad, el dominio de aplicación para la resolución establece su valor predeterminado en el dominio de aplicación donde esté ubicado el subproceso utilizado para la evaluación de la función.If the -ad option is not specified, the application domain for resolution defaults to the application domain where the thread that is used for function evaluation is located.

Si la función que se evalúa no es estática, el primer parámetro pasado debería ser un puntero this.If the function that is being evaluated is not static, the first parameter passed in should be a this pointer. En todos los dominios de aplicación se buscan argumentos para la evaluación de función.All application domains are searched for arguments to the function evaluation..

Para solicitar un valor de un dominio de aplicación, anteponga la variable con el módulo y el nombre de dominio de aplicación; por ejemplo, funceval -ad 0 System.Object.ToString hello.exe#0!MyClass.g_rootRef.To request a value from an application domain, prefix the variable with the module and application domain name; for example, funceval -ad 0 System.Object.ToString hello.exe#0!MyClass.g_rootRef. Este comando evalúa la función System.Object.ToString en el dominio de aplicación 0.This command evaluates the function System.Object.ToString in the application domain 0. Dado que el método ToString es una función de instancia, el primer parámetro debe ser un puntero this.Because the ToString method is an instance function, the first parameter must be a this pointer.
g[o]g[o] Hace que el programa continúe hasta que encuentre un punto de interrupción, se cierre o se produzca un evento (por ejemplo, una excepción no controlada) que haga que el programa se detenga.Causes the program to continue until it encounters a breakpoint, the program exits, or an event (for example, an unhandled exception) causes the program to stop.
h[elp] [command]h[elp] [command]

o bien-or-

?? [command][command]
Muestra una descripción de todos los comandos o una descripción detallada de un comando específico.Displays a description of all commands or a detailed description of a specified command.
ig[nore] [event]ig[nore] [event] Hace que el depurador solo se detenga en excepciones no controladas.Causes the debugger to stop on unhandled exceptions only.
int[ercept] FrameNumberint[ercept] FrameNumber Revierte el depurador hasta un número de marco especificado.Rolls the debugger back to a specified frame number.

Si el depurador encuentra una excepción, utilice este comando para revertir el depurador hasta el número de marco especificado.If the debugger encounters an exception, use this command to roll the debugger back to the specified frame number. También puede cambiar el estado del programa mediante el comando set y seguir usando el comando go.You can change the program state by using the set command and continue by using the go command.
k[ill]k[ill] Detiene el proceso activo.Stops the active process.
l[ist] [modules | appdomains | assemblies]l[ist] [modules | appdomains | assemblies] Muestra los módulos, dominios de aplicación o ensamblados cargados.Displays the loaded modules, application domains, or assemblies.
lo[ad] assemblyNamelo[ad] assemblyName Carga una extensión de la manera siguiente: se carga el ensamblado especificado y se intenta ejecutar el método estático LoadExtension del tipo Microsoft.Tools.Mdbg.Extension.Extension.Loads an extension in the following manner: The specified assembly is loaded and an attempt is then made to run the static method LoadExtension from the Microsoft.Tools.Mdbg.Extension.Extension type.
log [eventType]log [eventType] Permite establecer o mostrar los eventos que se van a registrar.Set or display the events to be logged.
mo[de] [option on/off]mo[de] [option on/off] Establece las distintas opciones de depurador.Sets different debugger options. Utilice mode sin opciones para obtener una lista de los modos de depuración y su configuración actual.Use mode with no options to get a list of the debugging modes and their current settings.
mon[itorInfo] monitorReferencemon[itorInfo] monitorReference Muestra la información de bloqueo del monitor de objetos.Displays object monitor lock information.
newo[bj] typeName [arguments...]newo[bj] typeName [arguments...] Crea un objeto de tipo typeName.Creates a new object of type typeName.
n[ext]n[ext] Ejecuta el código y se desplaza a la línea siguiente (incluso cuando la línea siguiente incluye muchas llamadas a funciones).Runs code and moves to the next line (even if the next line includes many function calls).
Opendump pathToDumpFileOpendump pathToDumpFile Abre el archivo de volcado de memoria especificado para la depuración.Opens the specified dump file for debugging.
o[ut]o[ut] Se desplaza al final de la función actual.Moves to the end of the current function.
pa[th] [pathName]pa[th] [pathName] Busca los archivos de código fuente en la ruta de acceso especificada si la ubicación no está disponible en los archivos binarios.Searches the specified path for the source files if the location in the binaries is not available.
p[rint] [var] | [-d]p[rint] [var] | [-d] Imprime todas las variables del ámbito (print), imprime la variable especificada (print var) o imprime las variables del depurador (print-d).Prints all variables in scope (print), prints the specified variable (print var), or prints the debugger variables (print-d).
printe[xception] [-r]printe[xception] [-r] Imprime la última excepción del subproceso actual.Prints the last exception on the current thread. Use la opción –r (recursiva) para atravesar la propiedad InnerException del objeto de excepción a fin de obtener información sobre la cadena completa de excepciones.Use the –r (recursive) option to traverse the InnerException property on the exception object to get information about the entire chain of exceptions.
pro[cessenum]pro[cessenum] Muestra los procesos activos.Displays the active processes.
q[uit] [exitcode]q[uit] [exitcode] Sale del shell de MDbg.exe y, opcionalmente, especifica el código de salida del proceso.Quits the MDbg.exe shell, optionally specifying the process exit code.
re[sume] [* | [~]threadNumber]re[sume] [* | [~]threadNumber] Reanuda el subproceso actual o el subproceso especificado por el parámetro threadNumber.Resumes the current thread or the thread specified by the threadNumber parameter.

Si el parámetro threadNumber se especifica como * o si el número de subproceso comienza con ~, el comando se aplica a todos los subprocesos excepto al especificado por threadNumber.If the threadNumber parameter is specified as * or if the thread number starts with ~, the command applies to all threads except the one specified by threadNumber.

La reanudación de un subproceso no suspendido no tiene ningún efecto.Resuming a non-suspended thread has no effect.
r[un] [-d(ebug) | -o(ptimize) |-enc] [[path_to_exe] [args_to_exe]]r[un] [-d(ebug) | -o(ptimize) |-enc] [[path_to_exe] [args_to_exe]] Detiene el proceso actual (si existe) e inicia uno nuevo.Stops the current process (if there is one) and starts a new one. Si no se pasa ningún argumento ejecutable, este comando ejecuta el programa que se ejecutó previamente con el comando run.If no executable argument is passed, this command runs the program that was previously executed with the run command. Si se proporciona un argumento ejecutable, se ejecuta el programa especificado con los argumentos proporcionados de manera opcional.If the executable argument is provided, the specified program is run using the optionally supplied arguments.

Si se omiten los eventos de carga de clases, de carga de módulos y de inicio de subprocesos (son la opción predeterminada), el programa se detiene en la primera instrucción ejecutable del subproceso principal.If class load, module load, and thread start events are ignored (as they are by default), the program stops on the first executable instruction of the main thread.

Puede forzar el depurador para que realice una compilación Just-In-Time (JIT) del código utilizando una de las tres marcas siguientes:You can force the debugger to just-in-time (JIT) compile the code by using one of the following three flags:

- -d ( ebug ) deshabilita las optimizaciones.- -d ( ebug ) disables optimizations. Este es el valor predeterminado de MDbg.exe.This is the default for MDbg.exe.
- -o ( ptimize ) fuerza el código para que se ejecute más como lo hace fuera del depurador, aunque también dificulta la experiencia de depuración.- -o ( ptimize ) forces the code to run more like it does outside the debugger, but also makes the debugging experience more difficult. Este es el valor predeterminado para usarlo fuera del depurador.This is the default for use outside the debugger.
- -enc habilita la característica Editar y continuar, pero afecta al rendimiento.- -enc enables the Edit and Continue feature but incurs a performance hit.
Set variable=valueSet variable=value Cambia el valor de cualquier variable en el ámbito.Changes the value of any in-scope variable.

También puede crear sus propias variables de depurador y asignarles valores de referencia desde la aplicación.You can also create your own debugger variables and assign reference values to them from within your application. Estos valores actúan como identificadores del valor original, e incluso el valor original está fuera de ámbito.These values act as handles to the original value, and even the original value is out of scope. Todas las variables de depurador deben comenzar con $ (por ejemplo, $var).All debugger variables must begin with $ (for example, $var). Borre estos identificadores y déjelos en blanco mediante el comando siguiente:Clear these handles by setting them to nothing using the following command:

set $var=
Setip [-il] numberSetip [-il] number Establece el puntero de instrucción (IP) actual del archivo en la posición especificada.Sets the current instruction pointer (IP) in the file to the specified position. Si se especifica la opción -il, el número representa un desplazamiento del Lenguaje intermedio de Microsoft (MSIL) en el método.If you specify the -il option, the number represents a Microsoft intermediate language (MSIL) offset in the method. De lo contrario, el número representa un número de línea de código fuente.Otherwise, the number represents a source line number.
sh[ow] [lines]sh[ow] [lines] Especifica el número de líneas que se van a mostrar.Specifies the number of lines to show.
s[tep]s[tep] Pasa la ejecución a la función siguiente en la línea actual o se desplaza a la línea siguiente si no hay ninguna función que procesar paso a paso.Moves execution into the next function on the current line, or moves to the next line if there is no function to step into.
su[spend] [* | [~]threadNumber]su[spend] [* | [~]threadNumber] Suspende el subproceso actual o el subproceso especificado por el parámetro threadNumber.Suspends the current thread or the thread specified by the threadNumber parameter. Si threadNumber se especifica como *, el comando se aplica a todos los subprocesos.If threadNumber is specified as *, the command applies to all threads. Si el número del subproceso comienza con ~, el comando se aplica a todos los subprocesos excepto al especificado por threadNumber.If the thread number starts with ~, the command applies to all threads except the one specified by threadNumber. Los subprocesos suspendidos se excluyen de la ejecución cuando el proceso se ejecuta mediante el comando go o step.Suspended threads are excluded from running when the process is run by either the go or step command. Si no hay ningún subproceso no suspendido en el proceso y se emite el comando go, el proceso no continuará.If there are no non-suspended threads in the process and you issue the go command, the process will not continue. En ese caso, presione CTRL-C para interrumpir el proceso.In that case, press CTRL-C to break into the process.
sy[mbol] commandName [commandValue]sy[mbol] commandName [commandValue] Permite especificar uno de los siguientes comandos:Specifies one of the following commands:

- symbol path ["value"]: muestra o establece la ruta de acceso actual a los símbolos.- symbol path ["value"] - Displays or sets the current symbol path.
- symbol addpath "value": agrega a la ruta de acceso actual a los símbolos.- symbol addpath "value" - Adds to your current symbol path.
- symbol reload ["module"]: recarga todos los símbolos o los símbolos del módulo especificado.- symbol reload ["module"] - Reloads either all symbols or the symbols for the specified module.
- symbol list [module]: muestra los símbolos cargados actualmente para todos los módulos o para el módulo especificado.- symbol list [module] - Shows the currently loaded symbols for either all modules or the specified module.
t[hread] [newThread] [-nick nickname]t[hread] [newThread] [-nick nickname] El comando de subprocesos sin parámetros muestra todos los subprocesos administrados en el proceso actual.The thread command with no parameters displays all managed threads in the current process. Los subprocesos suelen identificarse por sus números de subproceso; sin embargo, si un subproceso tiene asignado un alias, se muestra el alias en su lugar.Threads are usually identified by their thread numbers; however, if the thread has an assigned nickname, the nickname is displayed instead. Puede utilizar el parámetro -nick para asignar un alias a un subproceso.You can use the -nick parameter to assign a nickname to a thread.

- thread -nick threadName asigna un alias al subproceso que se está ejecutando actualmente.- thread -nick threadName assigns a nickname to the currently running thread.

Los alias no pueden ser números.Nicknames cannot be numbers. Si el subproceso actual ya tiene un alias asignado, el alias anterior se reemplaza con el nuevo.If the current thread already has an assigned nickname, the old nickname is replaced with the new one. Si el nuevo alias es una cadena vacía (""), el alias del subproceso actual se elimina y no se asigna ninguno nuevo.If the new nickname is an empty string (""), the nickname for the current thread is deleted and no new nickname is assigned to the thread.
u[p]u[p] Mueve el marco de pila activo hacia arriba.Moves the active stack frame up.
uwgc[handle] [var] | [address]uwgc[handle] [var] | [address] Imprime la variable en la que un identificador ha realizado el seguimiento.Prints the variable tracked by a handle. El identificador se puede especificar por nombre o dirección.The handle can be specified by name or address.
whenwhen Muestra las instrucciones when activas actualmente.Displays the currently active when statements.

when delete all | num [num [num …]]: elimina la instrucción when especificada por el número, o bien todas las instrucciones when si se especifica all.when delete all | num [num [num …]] - Deletes the when statement specified by the number, or all when statements if all is specified.

when stopReason [specific_condition] docmd [cmd [cmd …] ]: el parámetro stopReason puede tener uno de los siguientes valores:when stopReason [specific_condition] docmd [cmd [cmd …] ] - The stopReason parameter can be one of the following:

StepComplete, ProcessExited, ThreadCreated, BreakpointHit, ModuleLoaded, ClassLoaded, AssemblyLoaded, AssemblyUnloaded, ControlCTrapped, ExceptionThrown, UnhandledExceptionThrown, AsyncStop, AttachComplete, UserBreak, EvalComplete, EvalException, RemapOpportunityReached, NativeStop.StepComplete, ProcessExited, ThreadCreated, BreakpointHit, ModuleLoaded, ClassLoaded, AssemblyLoaded, AssemblyUnloaded, ControlCTrapped, ExceptionThrown, UnhandledExceptionThrown, AsyncStop, AttachComplete, UserBreak, EvalComplete, EvalException, RemapOpportunityReached, NativeStop.

specific_condition puede ser uno de los siguientes valores:specific_condition can be one of the following:

- number: para ThreadCreated y BreakpointHit, desencadena la acción solo cuando se detiene a través de un número de identificador de subproceso o de punto de interrupción con el mismo valor.- number - For ThreadCreated and BreakpointHit, triggers action only when stopped by a thread ID/breakpoint number with same value.
- [!]name: para ModuleLoaded, ClassLoaded, AssemblyLoaded, AssemblyUnloaded, ExceptionThrown y UnhandledExceptionThrown, desencadena la acción solo cuando el nombre coincide con el nombre de stopReason.- [!]name - For ModuleLoaded, ClassLoaded, AssemblyLoaded, AssemblyUnloaded, ExceptionThrown, and UnhandledExceptionThrown, triggers action only when the name matches the name of the stopReason.

specific_condition debe estar vacío para otros valores de stopReason.specific_condition must be empty for other values of stopReason.
w[here] [-v] [-c depth] [threadID]w[here] [-v] [-c depth] [threadID] Muestra información de depuración sobre los marcos de pila.Displays debug information about stack frames.

- La opción -v proporciona información detallada sobre los marcos de pila mostrados.- The -v option provides verbose information about each displayed stack frame.
- Al especificar un número para depth, se limita el número de marcos que se muestran.- Specifying a number for depth limits how many frames are displayed. Use el comando all para mostrar todos los marcos.Use the all command to display all frames. El valor predeterminado es 100.The default is 100.
- Si especifica el parámetro threadID, puede controlar los subprocesos que se asocian a la pila.- If you specify the threadID parameter, you can control which thread is associated with the stack. El valor predeterminado es únicamente el subproceso actual.The default is the current thread only. Use el comando all para obtener todos los subprocesos.Use the all command to get all threads.
x [-cnumSymbols] [module[!pattern]]x [-cnumSymbols] [module[!pattern]] Muestra las funciones que coinciden con pattern para un módulo.Displays functions that match the pattern for a module.

Si se especifica numSymbols, la salida se limita al número especificado.If numSymbols is specified, the output is limited to the specified number. Si no se especifica ! (que indica una expresión regular) para pattern, se muestran todas las funciones.If ! (indicating a regular expression) is not specified for pattern, all functions are displayed. Si no se proporciona module, se muestran todos los módulos cargados.If module is not provided, all loaded modules are displayed. Se pueden usar símbolos (~#) para establecer puntos de interrupción mediante el comando break.Symbols (~#) can be used to set breakpoints using the break command.

ComentariosRemarks

Compile la aplicación que se va a depurar mediante marcas específicas del compilador que hacen que el compilador genere símbolos de depuración.Compile the application to be debugged by using compiler-specific flags that cause your compiler to generate debugging symbols. Consulte la documentación del compilador para obtener más información acerca de estas marcas.Refer to your compiler's documentation for more information about these flags. Puede depurar aplicaciones optimizadas, aunque parte de la información de depuración se perderá.You can debug optimized applications, but some debugging information will be missing. Por ejemplo, muchas variables locales no estarán visibles y las líneas de código fuente serán incorrectas.For example, many local variables will not be visible and source lines will be inaccurate.

Después de compilar la aplicación, escriba mdbg en el símbolo del sistema para iniciar una sesión de depuración, como se muestra en el ejemplo siguiente.After you compile your application, type mdbg at the command prompt to start a debugging session, as shown in the following example.

C:\Program Files\Microsoft Visual Studio 8\VC>mdbg  
MDbg (Managed debugger) v2.0.50727.42 (RTM.050727-4200) started.  
Copyright (C) Microsoft Corporation. All rights reserved.  
  
For information about commands type "help";  
to exit program type "quit".  
mdbg>  

El símbolo del sistema mdbg> indica que se encuentra en el depurador.The mdbg> prompt indicates that you are in the debugger.

Cuando esté en el depurador, use los comandos y argumentos descritos en la sección anterior.Once you are in the debugger, use the commands and arguments described in the previous section.

Vea tambiénSee also