É possível obter os valores dos parâmetros para cada quadro na pilha de chamadas em .NET

StackOverflow https://stackoverflow.com/questions/819576

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu estou falando sobre o código .NET gerenciado. Se executar qualquer programa e anexar VS a ele, podemos ver os valores dos parâmetros de cada método na pilha de chamadas. Eu gostaria de criar uma solução de registro que irá registrar valores de todos os parâmetros de cada método na pilha de chamadas. Na verdade eu preciso esta informação no caso de ocorrer uma exceção.

Eu sei que é possível com perfil de API. Mas eu me pergunto é possível com somente código gerenciado?

UPDATE: Ok, provavelmente com .NET pura é impossível. Em seguida, pode estar com algum tipo de código não gerenciado ... o ponto é fazer isso de dentro do próprio aplicativo. Uma aplicação em caso de uma exceção poderia chamar alguma biblioteca (pode ser gerenciado) que retorna informações sobre os valores dos métodos na pilha de chamadas. Apenas pensamentos ...

Foi útil?

Solução

valores dos parâmetros não são armazenados na instância StackFrame. Na verdade, eles não são registrados / registados em tudo, a menos que você optar por fazê-lo explicitamente.

Uma maneira óbvia para registrar valores de teses é usar AOP. Seria certamente implica um custo, mas em conjunto com um quadro de exploração madeireira e o nível de registro direita, pode ser uma alternativa. Você também pode optar por instrumento apenas alguns tipos / métodos no seu BaseCode, onde exceções são mais propensos a ser acionada. Eu provavelmente escolheria PostSharp para as suas capacidades de tecelagem estáticos, para emitir registo de chamadas.

De qualquer forma, ele está longe de ser uma solução ideal, mas eu tenho medo que você não terá muitas opções se você está preso no mundo gerenciado.

Outras dicas

Sua melhor opção é, provavelmente, para inserir o código de rastreio necessário nos métodos relevantes. Dessa forma, você pode anexar ouvintes de rastreamento e valores despejo quando necessário.

Eu sei que não é o que você está pedindo, mas é uma maneira de obter os dados.

Como alternativa, você pode depurar o aplicativo usando WinDbg. O clstack! /! DSO comandos permitem que você inspecione os parâmetros e objetos de pilha.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top