Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Depurador de Linha de Comando do NET Framework ajuda os fornecedores de ferramentas e desenvolvedores de aplicativos a encontrar e corrigir bugs em programas destinados ao Common Language Runtime do .NET Framework. Essa ferramenta usa a API de depuração de tempo de execução para fornecer serviços de depuração. Você pode usar MDbg.exe para depurar apenas código gerenciado; Não há suporte para depuração de código não gerenciado.
Esta ferramenta está disponível através do NuGet. Para obter informações sobre instalação, consulte MDbg 0.1.0. Para executar a ferramenta, use o Console do Gerenciador de Pacotes. Para obter mais informações sobre como usar o Console do Gerenciador de Pacotes, consulte o artigo Console do Gerenciador de Pacotes.
No prompt do Gerenciador de Pacotes, digite o seguinte:
Sintaxe
MDbg [ProgramName[arguments]] [options]
Comandos
Quando estiver no depurador (conforme indicado pelo prompt mdbg> ), digite um dos comandos descritos na próxima seção:
comando [argumentos]
MDbg.exe comandos diferenciam maiúsculas de minúsculas.
| Comando | Description |
|---|---|
| ap[rocess] [número] | Alterna para outro processo depurado ou imprime os processos disponíveis. Os números não são IDs de processo reais (PIDs), mas uma lista indexada a 0. |
| 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 digitalizados sequencialmente. - break
FileName:LineNo define um ponto de interrupção numa localização da fonte.- break
~number define um ponto de interrupção num símbolo recentemente apresentado com o x comando.- break
módulo! ClassName.Method+IlOffset define um ponto de interrupção na localização totalmente qualificada. |
| block[ingObjects] | Exibe bloqueios de monitor, que estão bloqueando threads. |
| ca[tch] [exceptionType] | Faz com que o depurador quebre em todas as exceções, e não apenas nas exceções não tratadas. |
| cl[earException] | Marca a exceção atual como tratada para que a execução possa continuar. Se a causa da exceção não tiver sido tratada, a exceção pode ser rapidamente rejeitada. |
| conf[ig] [valor da opção] | Exibe todas as opções configuráveis e mostra como as opções são invocadas sem 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 é usado.- extpath+ Adiciona um caminho para carregar extensões. |
| del[ete] | Exclui um ponto de interrupção. |
| de[tach] | Desanexa de um processo depurado. |
| d[próprio] [quadros] | Move o quadro da pilha ativa para baixo. |
| eco | Ecoa uma mensagem para o console. |
| enableNotif[ication] typeName 0|1 | Habilita (1) ou desabilita (0) notificações personalizadas para o tipo especificado. |
| ex[it] [código de saída] | Sai do shell MDbg.exe e, opcionalmente, especifica o código de saída do processo. |
| fo[reach] [OutroComando] | Executa um comando em todos os threads.
OtherCommand é um comando válido que opera num único thread; foreachO OtherCommand executa o mesmo comando em todos os threads. |
f[unceval] [-adNum] functionName [args ... ] |
Executa uma avaliação de função no thread ativo atual onde a função a ser avaliada é functionName. O nome da função deve ser totalmente qualificado, incluindo namespaces. A -ad opção especifica o domínio do aplicativo a ser usado para resolver a função. Se a -ad opção não for especificada, o domínio do aplicativo para resolução assumirá como padrão o domínio do aplicativo onde o thread usado para avaliação da função está localizado.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 aplicação são pesquisados para argumentos para a avaliação da função..Para solicitar um valor de um domínio de aplicativo, prefixe a variável com o módulo e o nome de domínio do aplicativo; 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 0do aplicativo. Como o ToString método é uma função de instância, o primeiro parâmetro deve ser um this ponteiro. |
| g[o] | Faz com que o programa continue até encontrar um ponto de interrupção, a saída do programa ou um evento (por exemplo, uma exceção não tratada) faz com que o programa pare. |
|
h[elp] [comando] -or- ? [comando] |
Exibe 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 tratadas. |
| int[ercept] Número de quadro | Rola o depurador de volta para um número de quadro especificado. Se o depurador encontrar uma exceção, use este comando para rolar o depurador de volta para o número de quadro especificado. Pode alterar o estado do programa usando o set comando e continuar usando o go comando. |
| k[ill] | Interrompe o processo ativo. |
| l[ist] [módulos | appdomains | assemblies] | Exibe os módulos carregados, domínios de aplicativo ou assemblies. |
| lo[ad] assemblyName | Carrega uma extensão da seguinte maneira: O assembly especificado é carregado e, em seguida, é feita uma tentativa de executar o método LoadExtension estático a partir do Microsoft.Tools.Mdbg.Extension.Extension tipo. |
| log [eventType] | Defina ou exiba os eventos a serem registrados. |
| mo[de] [opção on/off] | Define diferentes opções de depurador. Use mode sem opções para obter uma lista dos modos de depuração e suas configurações atuais. |
| mon[itorInfo] monitorReferência | Exibe informações de bloqueio do monitor de objetos. |
| newo[bj] typeName [argumentos...] | Cria um novo objeto do tipo typeName. |
| n[ext] | Executa o código e move para a próxima linha (mesmo que a próxima linha inclua muitas chamadas de função). |
| OpendumppathToDumpFile | Abre o arquivo de despejo especificado para depuração. |
| o[ut] | Move para o final da função atual. |
| pa[th] [nome_do-caminho] | Pesquisa o caminho especificado para os arquivos de origem se o local nos binários não estiver disponível. |
p[rint] [var] | [-d] |
Imprime todas as variáveis no escopo (print), imprime a variável especificada (printvar) ou imprime as variáveis do depurador (print-d). |
| printe[xception] [-r] | Imprime a última exceção no thread atual. Use a -r opção (recursiva) para percorrer a InnerException propriedade no objeto de exceção para obter informações sobre toda a cadeia de exceções. |
| pro[cesseno] | Exibe os processos ativos. |
| q[uit] [exitcode] | Fecha o shell MDbg.exe, opcionalmente especificando o código de saída do processo. |
re[sume] [* | [~]númerothread] |
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 se aplicará a todos os threads, exceto ao especificado por threadNumber.Retomar um thread não suspenso não tem efeito. |
r[un] [-d(ebug) | -o(ptimize) |-enc] [[path_to_exe] [args_to_exe]] |
Interrompe o processo atual (se houver) e inicia um novo. Se nenhum argumento executável for passado, este comando executará o programa que foi executado anteriormente com o run comando. Se o argumento executável for fornecido, o programa especificado será executado usando os argumentos fornecidos opcionalmente.Se os eventos de carga de classe, carga de módulo e início de thread forem ignorados (como são por padrão), o programa para na primeira instrução executável do thread principal. Você pode forçar o depurador a compilar o código just-in-time (JIT) usando um dos três sinalizadores a seguir: - -d
ebug( ) desativa otimizações. Este é o padrão para MDbg.exe.- -o
ptimize( ) força o código a ser executado mais como fora do depurador, mas também torna a experiência de depuração mais difícil. Este é o padrão para uso fora do depurador.- -enc habilita o recurso Editar e Continuar, mas incorre em um acerto de desempenho. |
| Definir valor da variável= | Altera o valor de qualquer variável no escopo. Você também pode criar suas próprias variáveis de depurador e atribuir valores de referência a elas a partir 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-as como nada usando o seguinte comando:set $var= |
Setip [-il] número |
Define o ponteiro de instrução (IP) atual no arquivo para a posição especificada. Se você especificar a -il opção, o número representa um deslocamento de linguagem intermediária comum (CIL) 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 serem exibidas. |
| s[tep] | Move a 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 para entrar. |
| su[gastar] [* | [~]Número de thread] | Suspende o thread atual ou o thread especificado pelo parâmetro threadNumber . Se threadNumber for especificado como *, o comando se aplicará a todos os threads. Se o número do thread começar com ~, o comando se aplicará a todos os threads, exceto ao especificado por threadNumber. Threads suspensos são excluídos da execução quando o processo é executado pelo go comando ou step . Se não houver threads não suspensos no processo e emitir o go comando, o processo não continuará. Nesse caso, pressione CTRL-C para entrar no processo. |
| sy[mbol] comandoNome [ComandoValor] | Especifica um dos seguintes comandos: - symbol path ["value"] - Exibe 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] [-apelido nick] |
O comando thread sem parâmetros exibe todos os threads gerenciados no processo atual. Os threads são geralmente identificados pelos seus números de threads; no entanto, se o thread tiver um apelido atribuído, o apelido será exibido. Você pode usar o -nick parâmetro para atribuir um apelido a um thread.- thread
-nick
NomethreadName atribui um apelido ao thread em curso.As alcunhas não podem ser números. Se o thread atual já tiver um apelido atribuído, o apelido antigo será substituído pelo novo. Se o novo apelido for uma cadeia de caracteres vazia (""), o apelido do thread atual será excluído e nenhum novo apelido será atribuído ao thread. |
| u[p] | Move o quadro de pilha ativo para cima. |
| uwgc[handle] [var] | [endereço] | Imprime a variável rastreada por uma alça. O identificador pode ser especificado por nome ou endereço. |
| quando | Exibe as instruções ativas when no momento.when
apagar tudo | num [num [num ...]] - Elimina a when instrução especificada pelo número, ou todas as when declarações, se all for especificado.when
stopReason [specific_condition] docmd [cmd [cmd ...] ] - O parâmetro stopReason pode ser um dos seguintes:StepComplete, ProcessExited, , ThreadCreated, BreakpointHit, ModuleLoadedClassLoadedAssemblyLoadedAssemblyUnloadedControlCTrappedExceptionThrown, . UnhandledExceptionThrownAsyncStopAttachCompleteUserBreakEvalCompleteEvalExceptionRemapOpportunityReachedNativeStopspecific_condition pode ser uma das seguintes: - number - Para ThreadCreated e BreakpointHit, aciona a ação somente quando parada por um número de ID de thread/ponto de interrupção com o mesmo valor.- [ !]name - Para ModuleLoaded, ClassLoaded, AssemblyLoaded, , AssemblyUnloadedExceptionThrown, 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. |
w[here] [-v] [-cprofundidade] [threadID] |
Exibe informações de depuração sobre quadros de pilha. - A -v opção fornece informações detalhadas sobre cada quadro de pilha exibido.- Especificar um número para depth limitar quantos quadros são exibidos. Use o all comando para mostrar todos os frames. A predefinição é 100.- Se você especificar o parâmetro threadID , poderá controlar qual thread está associado à pilha. O padrão é apenas o thread atual. Usa o all comando para obter todas as threads. |
x [-cnumSymbols] [módulo[!padrão]] |
Exibe funções que correspondem ao pattern de um módulo.Se numSymbols for especificado, a saída será limitada ao número especificado. Se ! (indicando uma expressão regular) não for especificado para o padrão, todas as funções serão exibidas. Se o módulo não for fornecido, todos os módulos carregados serão exibidos. Símbolos (~#) podem ser usados para definir pontos de interrupção usando o break comando. |
Observações
Compile o aplicativo a ser depurado usando sinalizadores específicos do compilador que fazem com que o compilador gere 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 algumas informações de depuração estarão faltando. Por exemplo, muitas variáveis locais não serão visíveis e as linhas de origem serão imprecisas.
Depois de compilar a sua aplicação, escreva mdbg no prompt de comandos para iniciar uma sessão de depuração, como 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> prompt indica que você está no depurador.
Quando estiver no depurador, use os comandos e argumentos descritos na seção anterior.