.NET의 통화 스택에서 각 프레임에 대해 매개 변수의 값을 얻을 수 있습니까?

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

  •  03-07-2019
  •  | 
  •  

문제

관리 된 .NET 코드에 대해 이야기하고 있습니다. 프로그램을 실행하고 VS를 첨부하면 Call Stack의 각 방법에 대한 매개 변수의 값을 볼 수 있습니다. 통화 스택의 각 메소드에 대한 모든 매개 변수의 값을 기록하는 로깅 솔루션을 만들고 싶습니다. 실제로 예외가 발생할 경우이 정보가 필요합니다.

API 프로파일 링이 가능하다는 것을 알고 있습니다. 그러나 관리 코드 만 가능합니까?

업데이트 : OK, 아마도 순수한 .NET를 사용하면 불가능합니다. 그런 다음 어떤 종류의 관리되지 않는 코드가있을 수 있습니다 ... 요점은 응용 프로그램 자체 내에서이를 수행하는 것입니다. 예외의 경우 응용 프로그램은 콜 스택의 메서드 값에 대한 정보를 반환하는 일부 라이브러리 (관리되지 않을 수 있음) 호출 할 수 있습니다. 그냥 생각 ...

도움이 되었습니까?

해결책

매개 변수 값은 stackframe 인스턴스에 저장되지 않습니다. 실제로, 당신이 명시 적으로 그것을 선택하지 않는 한, 그것들은 전혀 기록/로그인되지 않았습니다.

이 값을 기록하는 명백한 방법 중 하나는 AOP를 사용하는 것입니다. 그것은 확실히 비용을 암시하지만 로깅 프레임 워크와 올바른 로그 레벨과 함께 대안 일 수 있습니다. 또한베이스 코드에서 일부 유형/메소드 만 기기를 기기로 선택할 수도 있습니다. 로그 호출을 방출하기 위해 정적 직조 기능을 위해 PostSharp를 선택할 것입니다.

어쨌든, 그것은 이상적인 솔루션이 아닌 것이지만, 관리 된 세계에 갇혀 있다면 많은 옵션이 없을 것 같습니다.

다른 팁

가장 좋은 옵션은 아마도 필요한 추적 코드를 관련 방법에 삽입하는 것입니다. 그렇게하면 필요할 때 추적 리스너를 첨부하고 값을 덤프 할 수 있습니다.

나는 그것이 당신이 요구하는 것이 아니라는 것을 알고 있지만 데이터를 얻는 한 가지 방법입니다.

또는 WindBG를 사용하여 응용 프로그램을 디버깅 할 수 있습니다. ! clstack/! dso 명령을 사용하면 매개 변수와 스택 객체를 검사 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top