Compartilhar via


MDbg.exe (.NET Framework depurador de linha de comando)

O depurador de linha de comando do NET Framework ajuda os fornecedores de ferramentas e os desenvolvedores de aplicativos, localizar e corrigem erros nos programas destinados a.NET Framework common language runtime. Essa ferramenta usa a API de depuração do runtime para fornecer serviços de depuração. Você pode usar MDbg.exe para depurar somente código gerenciado; Não há nenhum suporte para depuração de código não gerenciado.

A.Depurador de linha de comando do NET Framework é instalado automaticamente com os dois Visual Studio e o O SDK do Windows. Para iniciar a ferramenta, abra o Prompt de comando Visual Studio ou o Shell CMD do SDK do Windows. (Para abrir o Shell CMD, clique em Iniciar, clique em Todos os programas, clique em versão 7.0 do Microsoft Windows SDKe em seguida, clique em Shell cmd.) No prompt de comando, digite o seguinte:

MDbg [ProgramName[arguments]] [options]

Comandos

Quando você está no depurador (conforme indicado pelo mdbg> prompt), digite um dos comandos descritos na próxima seção:

commandargumentos

MDbg.exe comandos diferenciam maiúsculas de minúsculas.

Comando

Descrição

aprocess]number

Alterna para outro processo depurado ou imprime processos disponíveis. Os números não são o processo real IDs (PIDs), mas uma lista indexada de 0.

attach]pid

Anexa a um processo ou imprime processos disponíveis.

brromper]ClassName.Method | FileName:LineNo]

Define um ponto de interrupção no método especificado. Módulos são examinados seqüencialmente.

  • quebra de FileName:LineNo define um ponto de interrupção em um local na fonte.

  • quebra de ~ número define um ponto de interrupção em um símbolo recentemente exibido com o x comando.

  • quebra demódulo de!ClassName.Method+IlOffset define um ponto de interrupção no local totalmente qualificado.

blocoingObjects

Exibe monitora os bloqueios, que estão bloqueando segmentos.

catch]exceptionType

Faz com que o depurador quebrar em todas as exceções e não apenas as exceções sem tratamento.

CLearException

Marca a exceção atual como manipulado para que possa continuar a execução. Se a causa da exceção não tenha lidada com, a exceção pode ser relançada rapidamente.

config]option value

Exibe todas as opções configuráveis e mostra como as opções são invocadas sem quaisquer valores opcionais. Se a opção for especificada, define value como a opção atual. As seguintes opções estão disponíveis atualmente:

  • extpathDefine o caminho para procurar por extensões quando a load comando é usado.

  • extpath+Adiciona um caminho para o carregamento de extensões.

delete

Exclui um ponto de interrupção.

detach

Desconecta-se de um processo depurado.

down]frames

Move o quadro de pilha ativa para baixo.

eco

Exibe uma mensagem no console.

enableNotificação de senhatypeName 0 | 1

Permite que (1) ou desativa (0) de notificações personalizadas para o tipo especificado.

exit]exitcode

Sai do shell de MDbg.exe e, opcionalmente, especifica o código de saída do processo.

FOalcançar]OtherCommand

Executa um comando em todos os threads. OtherCommand é um comando válido que opera em um thread; foreach OtherCommand executa o mesmo comando em todos os threads.

funceval]-ad NumfunctionNameargs ... ]

Realiza uma avaliação de função no segmento atual ativo onde a função para avaliar se é nomedafunção. O nome da função deve ser totalmente qualificado, incluindo espaços para nome.

O -ad opção especifica o domínio de aplicativo para usar para resolver a função. Se a -ad opção não for especificada, o domínio de aplicativo para a resolução padrão é o domínio de aplicativo, onde se encontra o segmento que é usado para a avaliação da função.

Se a função que está sendo avaliada não for estática, o primeiro parâmetro passado deve ser um this ponteiro. Todos os domínios de aplicativo são pesquisados para argumentos para a avaliação de função..

Para solicitar um valor de um domínio de aplicativo, prefixar a variável com o nome de domínio do módulo e o aplicativo; Por exemplo, funceval -ad 0 System.Object.ToString hello.exe#0!MyClass.g_rootRef. Esse comando avalia a função System.Object.ToString no domínio do aplicativo 0. Porque o ToString método é uma função de instância, o primeiro parâmetro deve ser um this ponteiro.

go

Faz com que o programa continue até encontrar um ponto de interrupção, a sai do programa ou um evento (por exemplo, uma exceção não tratada) faz com que o programa pare.

help]command

- ou -

? command

Exibe uma descrição de todos os comandos ou uma descrição detalhada de um comando especificado.

ignore]event

Faz com que o depurador para parar em apenas as exceções não tratadas.

interceptFrameNumber

Reverte o depurador a um número de quadro especificado.

Se o depurador encontrar uma exceção, use esse comando para reverter o depurador para o número do quadro especificado. Você pode alterar o estado de programa usando o set comando e continuar usando o Ir comando.

kill

Interrompe o processo ativo.

list]modules | AppDomains | assemblies]

Exibe os módulos carregados, domínios de aplicativo ou assemblies.

loadassemblyName

Carrega uma extensão da seguinte maneira: O assembly especificado é carregado e, em seguida, é feita uma tentativa para executar o método estático LoadExtension partir do Microsoft.Tools.Mdbg.Extension.Extension tipo.

logeventType

Definir ou exibir os eventos a serem registrados.

mode]option on/off

Define opções diferentes de depurador. Use mode sem opções para obter uma lista de modos de depuração e suas configurações atuais.

segitorInfomonitorReference

Exibe informações sobre o bloqueio do objeto monitor.

newobjtypeNamearguments...

Cria um novo objeto do tipo typeName.

next

Executa o código e move para a próxima linha (mesmo se a linha seguinte inclui várias chamadas de função).

Opendump pathToDumpFile

Abre o arquivo de despejo especificado para depuração.

out

Move para o fim da função atual.

path]pathName

Pesquisa o caminho especificado para os arquivos de origem, se o local nos binários não está disponível.

print]var] |-d]

Imprime todas as variáveis no escopo (Imprimir), imprime a variável especificada (Imprimir var), ou imprime as variáveis do depurador (Imprimir -d).

printexception]-r

Imprime a última exceção no segmento atual. Use o –r opção (recursivo) para atravessar o InnerException propriedade no objeto de exceção para obter informações sobre toda a cadeia de exceções.

PROcessenum

Exibe os processos ativos.

quit]exitcode

Fecha o shell de MDbg.exe, opcionalmente, especificar o código de saída do processo.

resume]* | [~threadNumber

Reinicia o segmento atual ou o segmento especificado pelo threadNumber parâmetro.

Se o threadNumber parâmetro é especificado como * ou se o número de segmento começa com ~, o comando se aplica a todos os threads, exceto aquele especificado por threadNumber.

Retomar um thread suspenso não tem nenhum efeito.

run]-d(ebug) | -o(ptimize) |-enc] [path_to_exe]args_to_exe]

Pára o processo atual (se houver) e inicia um novo. Se nenhum argumento executável for passado, esse comando executa o programa que foi executado anteriormente com o run comando. Se o argumento executável é fornecido, o programa especificado é executado usando os argumentos fornecidos opcionalmente.

Carregamento de classe, carregamento de módulo e eventos de início do segmento sejam ignorados (como eles são por padrão), o programa pára na primeira instrução executável do thread principal.

Você pode forçar o depurador para compilar o código do just-in-time (JIT) usando um dos três sinalizadores a seguintes:

  • -d(ebug) desabilita otimizações. Este é o padrão para MDbg.exe.

  • -o(ptimize) força o código para executar mais como ele faz fora do depurador, mas também dificulta a experiência de depuração. Este é o padrão para uso fora do depurador.

  • -encativa o recurso Edit and Continue, mas gera um impacto no desempenho.

Definir variável=valor

Altera o valor de qualquer variável no escopo.

Você também pode criar seu próprios depurador variáveis e atribuir valores de referência a eles de dentro de seu aplicativo. Esses valores atuam como identificadores para o valor original, e até mesmo o valor original está fora do escopo. Todas as variáveis do depurador devem começar com $ (por exemplo, $var). Limpe essas alças definindo-os como nothing usando o seguinte comando:

set $var=

Setip-il number

Define o ponteiro de instrução atual (IP) no arquivo para a posição especificada. Se você especificar o -il opção, o número representa um Microsoft intermediate language (MSIL) deslocamento no método. Caso contrário, o número representa um número de linha de origem.

show]lines

Especifica o número de linhas para mostrar.

step

Move de execução para a próxima função na linha atual ou move para a próxima linha se não houver nenhuma função Step into.

suspend[* | [~]threadNumber

Suspende o thread atual ou o segmento especificado pelo threadNumber parâmetro. Se threadNumber é especificado como *, o comando se aplica a todos os segmentos. Se o número de segmento começa com ~, o comando se aplica a todos os threads, exceto aquele especificado por threadNumber. Suspensos segmentos são excluídos do executando quando o processo é executado tanto o Ir ou etapa comando. Se não houver threads suspensos não no processo e você emitir o Ir comando, o processo não continuará. Nesse caso, pressione CTRL-C para dividir o processo.

SYmbolcommandNamecommandValue

Especifica um dos seguintes comandos:

  • symbol path"value"]-Exibe ou define o caminho de símbolo atual.

  • symbol addpath "value"-Adiciona o caminho de símbolo atual.

  • symbol reload"module"-Recarrega todos os símbolos ou os símbolos para o módulo especificado.

  • symbol listmodule]-Mostra os símbolos carregados para todos os módulos ou o módulo especificado.

thread]newThread[-nick apelido]

O comando de thread sem parâmetros exibe todos os threads gerenciados no processo atual. Threads geralmente são identificados por seus números de thread; No entanto, se o thread tiver um apelido atribuído, o apelido é exibido. Você pode usar o -nick parâmetro para atribuir um apelido para o segmento.

  • thread -nick threadName atribui um apelido para o segmento em execução no momento.

Apelidos não podem ser números. Se o thread atual já tem um apelido atribuído, o apelido antigo é substituído pelo novo. Se o novo apelido é uma seqüência vazia (""), o apelido para o segmento atual é excluído e nenhum novo apelido é atribuído ao segmento.

up

Move o quadro de pilhas ativo para cima.

uwgchandle]var] |address

Imprime a variável controlada por um identificador. O identificador pode ser especificado por nome ou endereço.

Quando

Exibe atualmente ativo when instruções.

Quando Excluir tudo | numnumnum …]]-Exclui a when instrução especificado pelo número, ou todos when instruções se all é especificado.

when stopReasonspecific_condition do cmdcmdcmd …] ] - 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.

specific_condition pode ser uma das seguintes opções:

  • número - a para ThreadCreated e BreakpointHit, disparadores ação somente quando interrompido por um thread de número de identificação/ponto de interrupção com o mesmo valor.

  • !nome - a para ModuleLoaded, ClassLoaded, AssemblyLoaded, AssemblyUnloaded, ExceptionThrown, e UnhandledExceptionThrown, aciona a ação somente quando o nome corresponde ao nome do stopReason.

specific_condition deve estar vazio para outros valores de stopReason.

where]-v] [-c depth]threadID

Exibe informações sobre os quadros de pilha de depuração.

  • O -v opção fornece informações detalhadas sobre cada quadro de pilha exibida.

  • Especificar um número para depth limita quantos quadros são exibidos. Use o todos os comando para exibir todos os quadros. O padrão é 100.

  • Se você especificar o threadID parâmetro, você pode controlar o segmento que está associado com a pilha. O padrão é a thread atual. Use o todos os comando para obter todos os threads.

x-c numSymbols]module!pattern]

Exibe as funções que correspondem a pattern para um módulo.

Se numSymbols for especificado, a saída é limitada ao número especificado. Se ! (indicando uma expressão regular) não for especificado para padrão, todas as funções são exibidas. Se módulo de não é fornecido, todos os módulos carregados são exibidos. Símbolos (~ #) pode ser usado para definir pontos de interrupção usando o quebra comando.

Comentários

Compile o aplicativo a ser depurado usando sinalizadores de compilador específicos que fazem com que o compilador ao gerar símbolos de depuração. Consulte a documentação do compilador para obter mais informações sobre esses sinalizadores. Você pode depurar aplicativos otimizados, mas estarão falta algumas informações de depuração. Por exemplo, muitas variáveis locais não será visíveis e linhas de origem não serão exatos.

Após compilar o seu aplicativo, digite mdbg no prompt de comando para iniciar uma sessão de depuração, conforme mostrado no exemplo a seguir.

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>

O mdbg> prompt indica que você está no depurador.

Uma vez no depurador, use os comandos e argumentos descritos na seção anterior.

Consulte também

Referência

Prompt de comando Visual Studio

Outros recursos

Ferramentas.NET Framework