MDbg.exe (.NET Framework Command-Line Depurador)
O Depurador do NET Framework Command-Line ajuda os fornecedores de ferramentas e programadores de aplicações a encontrar e corrigir erros em programas que visam o .NET Framework runtime de linguagem comum. Esta ferramenta utiliza a API de depuração de runtime para fornecer serviços de depuração. Pode utilizar MDbg.exe para depurar apenas código gerido; não existe suporte para a depuração de código não gerido.
Esta ferramenta está disponível através do NuGet. Para obter informações sobre a instalação, veja MDbg 0.1.0. Para executar a ferramenta, utilize a Consola do Gestor de Pacotes. Para obter mais informações sobre como utilizar a Consola do Gestor de Pacotes, veja o artigo Consola do Gestor de Pacotes .
Na linha de comandos gestor de pacotes, escreva o seguinte:
Syntax
MDbg [ProgramName[arguments]] [options]
Comandos
Quando estiver no depurador (conforme indicado pela linha de comandos mdbg> ), escreva um dos comandos descritos na secção seguinte:
comando [argumentos]
MDbg.exe comandos são sensíveis a maiúsculas e minúsculas.
Comando | Descrição |
---|---|
ap[rocess] [número] | Muda para outro processo depurado ou imprime os processos disponíveis. Os números não são IDs de processo reais (PIDs), mas sim uma lista com 0 indexados. |
a[ttach] [pid] | Anexa a um processo ou imprime os processos disponíveis. |
b[reak] [ClassName.Method | FileName:LineNo] | Define um ponto de interrupção no método especificado. Os módulos são analisados sequencialmente. - breakFileName:LineNo define um ponto de interrupção numa localização na origem. - break~number define um ponto de interrupção num símbolo recentemente apresentado com o comando x . - módulo break! ClassName.Method+IlOffset define um ponto de interrupção na localização completamente qualificada. |
block[ingObjects] | Mostra bloqueios de monitorização, que estão a bloquear threads. |
ca[tch] [exceptionType] | Faz com que o depurador seja interrompido em todas as exceções e não apenas nas exceções não processadas. |
cl[earException] | Marca a exceção atual como processada para que a execução possa continuar. Se a causa da exceção não tiver sido tratada, a exceção poderá ser rapidamente reencavada. |
conf[ig] [valor da opção] | Apresenta 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 atualmente disponíveis:- extpath define o caminho para procurar extensões quando o load comando é utilizado.- extpath+ adiciona um caminho para carregar extensões. |
del[ete] | Elimina um ponto de interrupção. |
de[tach] | Desanexa de um processo depurado. |
d[own] [frames] | Move a moldura de pilha ativa para baixo. |
echo | Faz eco de uma mensagem para a consola. |
enableNotif[ication] typeName 0|1 | Ativa (1) ou desativa (0) notificações personalizadas para o tipo especificado. |
ex[it] [exitcode] | Sai da shell MDbg.exe e, opcionalmente, especifica o código de saída do processo. |
fo[reach] [OtherCommand] | Executa um comando em todos os threads. OtherCommand é um comando válido que opera num thread; foreachOtherCommand executa o mesmo comando em todos os threads. |
f[unceval] [-ad Num] functionName [args ... ] |
Efetua uma avaliação de função no thread ativo atual onde a função a avaliar é functionName. O nome da função tem de ser completamente qualificado, incluindo espaços de nomes. A -ad opção especifica o domínio da aplicação a utilizar para resolver a função. Se a opção -ad não for especificada, o domínio da aplicação para resolução é predefinido para o domínio da aplicação onde está localizado o thread utilizado para avaliação de funções.Se a função que está a ser avaliada não for estática, o primeiro parâmetro transmitido deve ser um this ponteiro. Todos os domínios da aplicação são procurados por argumentos para a avaliação da função..Para pedir um valor a partir de um domínio de aplicação, prefixe a variável com o nome de domínio do módulo e da aplicação; por exemplo, funceval -ad 0 System.Object.ToString hello.exe#0!MyClass.g_rootRef . Este comando avalia a função System.Object.ToString no domínio 0 da aplicação . Uma vez que o ToString método é uma função de instância, o primeiro parâmetro tem de ser um this ponteiro. |
g[o] | Faz com que o programa continue até encontrar um ponto de interrupção, o programa sair ou um evento (por exemplo, uma exceção não processada) faz com que o programa pare. |
h[elp] [comando] -ou- ? [comando] |
Apresenta uma descrição de todos os comandos ou uma descrição detalhada de um comando especificado. |
ig[nore] [evento] | Faz com que o depurador pare apenas em exceções não processadas. |
int[ercept] FrameNumber | Reverte o depurador para um número de fotograma especificado. Se o depurador encontrar uma exceção, utilize este comando para reverter o depurador para o número de frame especificado. Pode alterar o estado do programa com o comando set e continuar com o comando go . |
k[iii] | Para o processo ativo. |
l[ist] [modules | appdomains | assemblies] | Apresenta os módulos carregados, domínios de aplicação ou assemblagens. |
lo[ad] assemblyName | Carrega uma extensão da seguinte forma: a assemblagem especificada é carregada e, em seguida, é feita uma tentativa para executar o método LoadExtension estático a Microsoft.Tools.Mdbg.Extension.Extension partir do tipo. |
log [eventType] | Defina ou apresente os eventos a registar. |
mo[de] [opção ativada/desativada] | Define diferentes opções de depurador. Utilize mode sem opções para obter uma lista dos modos de depuração e das definições atuais. |
mon[itorInfo] monitorReference | Apresenta informações de bloqueio do monitor de objetos. |
newo[bj] typeName [argumentos...] | Cria um novo objeto do tipo TypeName. |
n[ext] | Executa código e avança para a linha seguinte (mesmo que a linha seguinte inclua muitas chamadas de função). |
OpendumppathToDumpFile | Abre o ficheiro de informação de falha de sistema especificado para depuração. |
o[ut] | Move-se para o fim da função atual. |
pa[th] [pathName] | Procura o caminho especificado para os ficheiros de origem se a localização nos binários não estiver disponível. |
p[rint] [var] | [-d ] |
Imprime todas as variáveis no âmbito (imprimir), imprime a variável especificada (var de impressão) ou imprime as variáveis de depurador (imprimir-d ). |
printe[xception] [-r] | Imprime a última exceção no thread atual. Utilize a opção –r (recursiva) para percorrer a InnerException propriedade no objeto de exceção para obter informações sobre toda a cadeia de exceções. |
pro[cessenum] | Apresenta os processos ativos. |
q[uit] [exitcode] | Sai da shell de MDbg.exe, especificando opcionalmente o código de saída do processo. |
re[sume] [* | [~ ]threadNumber] |
Retoma o thread atual ou o thread especificado pelo parâmetro threadNumber . Se o parâmetro threadNumber for especificado como * ou se o número do thread começar com ~ , o comando aplica-se a todos os threads, exceto o especificado por threadNumber.Retomar um thread não suspenso não tem qualquer efeito. |
r[un] [-d (ebug ) | -o (ptimize ) |-enc ] [[path_to_exe] [args_to_exe]] |
Para o processo atual (se existir um) e inicia um novo. Se não for transmitido nenhum argumento executável, este comando executa o programa que foi executado anteriormente com o run comando . Se for fornecido o argumento executável, o programa especificado é executado com os argumentos fornecidos opcionalmente.Se a carga da classe, a carga do módulo e os eventos de início do thread forem ignorados (como estão por predefinição), o programa para na primeira instrução executável do thread principal. Pode forçar o depurador a compilar o código just-in-time (JIT) utilizando um dos três sinalizadores seguintes: - -d (ebug ) desativa as otimizações. Esta é a predefinição para MDbg.exe.- -o (ptimize ) força o código a ser executado mais como faz fora do depurador, mas também dificulta a experiência de depuração. Esta é a predefinição para utilização fora do depurador.- -enc ativa a funcionalidade Editar e Continuar, mas implica um impacto no desempenho. |
Definirvalorvariável= | Altera o valor de qualquer variável no âmbito. Também pode criar as suas próprias variáveis de depurador e atribuir-lhes valores de referência a partir da sua aplicação. Estes valores funcionam como identificadores para o valor original e até o valor original está fora do âmbito. Todas as variáveis de depurador têm de começar por $ (por exemplo, $var ). Limpe estas alças ao defini-las como nada com o seguinte comando:set $var= |
Número de descrição [-il ] |
Define o ponteiro de instrução atual (IP) no ficheiro para a posição especificada. Se especificar a opção -il , o número representa um desvio do idioma intermédio da Microsoft (MSIL) no método. Caso contrário, o número representa um número de linha de origem. |
sh[ow] [linhas] | Especifica o número de linhas a mostrar. |
s[tep] | Move a execução para a função seguinte na linha atual ou move-se para a linha seguinte se não existir nenhuma função para avançar. |
su[spend] [* | [~] threadNumber] | Suspende o thread atual ou o thread especificado pelo parâmetro threadNumber . Se threadNumber for especificado como * , o comando aplica-se a todos os threads. Se o número do thread começar com ~ , o comando aplica-se a todos os threads, exceto o especificado por threadNumber. Os threads suspensos são excluídos da execução quando o processo é executado pelo comando go ou step . Se não existirem threads não suspensos no processo e emitir o comando go , o processo não continuará. Nesse caso, prima CTRL-C para entrar no processo. |
sy[mbol] commandName [commandValue] | Especifica um dos seguintes comandos: - symbol path ["value" ] - Apresenta ou define o caminho do símbolo atual.- symbol addpath "value" - Adiciona ao seu caminho de símbolo atual.- symbol reload ["module" ] - Recarrega todos os símbolos ou os símbolos do módulo especificado.- symbol list [module ] - Mostra os símbolos atualmente carregados para todos os módulos ou para o módulo especificado. |
t[hread] [newThread] [-nick nickname] |
O comando thread sem parâmetros apresenta todos os threads geridos no processo atual. Normalmente, os threads são identificados pelos respetivos números de thread; no entanto, se o thread tiver uma alcunha atribuída, a alcunha é apresentada. Pode utilizar o -nick parâmetro para atribuir uma alcunha a um thread.- thread -nick threadName atribui uma alcunha ao thread atualmente em execução.As alcunhas não podem ser números. Se o thread atual já tiver uma alcunha atribuída, a alcunha antiga é substituída pela nova. Se a nova alcunha for uma cadeia vazia (""), a alcunha para o thread atual é eliminada e não é atribuída nenhuma nova alcunha ao thread. |
u[p] | Move a moldura da pilha ativa para cima. |
uwgc[handle] [var] | [endereço] | Imprime a variável controlada por uma alça. A alça pode ser especificada por nome ou endereço. |
quando | Apresenta as instruções atualmente ativas when .quandoeliminar tudo | num [num [num ...]] - Elimina a when instrução especificada pelo número ou todas as when instruções, se all for especificada.quando stopReason [specific_condition ] fazercmd [cmd [cmd ...] ] - O parâmetro stopReason pode ser um dos seguintes:StepComplete , ProcessExited , ThreadCreated , BreakpointHit , ModuleLoaded , ClassLoaded , AssemblyLoaded , AssemblyUnloaded , ControlCTrapped , ExceptionThrown , UnhandledExceptionThrown , AsyncStop , AttachComplete , UserBreak , EvalComplete , EvalException , RemapOpportunityReached , NativeStop .specific_condition pode ser um dos seguintes: - number - Para ThreadCreated e BreakpointHit , aciona a ação apenas quando parada por um número de ID de thread/ponto de interrupção com o mesmo valor.- [ ! ]name - Para ModuleLoaded , , ClassLoaded , AssemblyLoaded , AssemblyUnloaded , ExceptionThrown e UnhandledExceptionThrown , aciona a ação apenas quando o nome corresponde ao nome do stopReason.specific_condition tem de estar vazio para outros valores de stopReason. |
w[aqui] [-v ] [-c profundidade] [threadID] |
Apresenta informações de depuração sobre fotogramas de pilha. - A -v opção fornece informações verbosas sobre cada fotograma de pilha apresentado.- Especificar um número para depth limites de quantos frames são apresentados. Utilize todo o comando para apresentar todas as molduras. A predefinição é 100.- Se especificar o parâmetro threadID , pode controlar que thread está associado à pilha. A predefinição é apenas o thread atual. Utilize todo o comando para obter todos os threads. |
x [-c numSymbols] [module[! pattern]] |
Apresenta funções que correspondem às de pattern um módulo.Se numSymbols for especificado, o resultado será limitado ao número especificado. Se ! (indicando uma expressão regular) não for especificado para o padrão, todas as funções são apresentadas. Se o módulo não for fornecido, todos os módulos carregados são apresentados. Os símbolos (~#) podem ser utilizados para definir pontos de interrupção com o comando break . |
Observações
Compile a aplicação para ser depurada com sinalizadores específicos do compilador que fazem com que o compilador gere símbolos de depuração. Veja a documentação do compilador para obter mais informações sobre estes sinalizadores. Pode depurar aplicações otimizadas, mas algumas informações de depuração estarão em falta. Por exemplo, muitas variáveis locais não serão visíveis e as linhas de origem serão imprecisas.
Depois de compilar a aplicação, escreva mdbg na linha de comandos para iniciar uma sessão de depuração, conforme mostrado no exemplo seguinte.
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>
pedido indica que está no depurador.
Assim que estiver no depurador, utilize os comandos e argumentos descritos na secção anterior.
Ver também
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários