2009-10-13 8 views
3

Visual Studio에서 매우 큰 C++/c 프로그램을 디버깅하려고합니다. 하나의 매개 변수 값을 변경하면 결과가 크게 변경됩니다. 나는 run과 diff를위한 호출 스택을 기록하고 싶다.Visual Studio에서 호출 스택을 기록합니다.

누구도 중단 점을 설정하지 않고 VS에서 파일에 호출 스택을 덤프하고 창에서 모두 선택/복사를 사용하는 방법을 알고 있습니까?

감사합니다.

답변

2

StackWalk64 API를 사용하는이 codeproject example을 살펴보십시오.

+0

다른 문제를 발견했습니다. 그러나이 솔기는 유망하다. –

+19

당신의 해결책이 무엇인지 알아봐 주시겠습니까? :) 나는 같은 문제를 묻는 사람을 찾은 다음 "오, 신경 쓰지 않고 해결책을 찾았습니다"와 같은 자신의 질문에 답하는 녀석을 찾는 것을 정말 싫어합니다 ... – Jan

+0

@BogdanKanivets : 해결책? – user565739

2

System.Diagnostics.StackTrace을 사용하면 현재 호출 스택의 문자열 표현을 가져 와서 파일에 쓸 수 있습니다. 예를 들어 현재 스택을 기록 할 때마다

private static writeStack(string file) 
{ 
    StackTrace trace = new StackTrace(true); // the "true" param here allows you to get the file name, etc. 
    using (StreamWriter writer = new StreamWriter(file)) 
    { 
    for (int i = 0; i < trace.FrameCount; i++) 
     { 
      StackFrame frame = trace.GetFrame(i); 
      writer.WriteLine("{0}\t{1}\t{2}", frame.GetFileName(), frame.GetFileLineNumber(), frame.GetMethod()); 
     } 
    } 
} 

그런 다음, 단지 writeStack(somePath)를 호출합니다.

+0

이 C/C++ 또는 C#입니까? 따라서 적용 할 수 없습니까? – grrussel

+0

이것은 C#이지만 C#을 찾고 있었기 때문에이 대답은 여전히 ​​매우 유용합니다. – rolls

관련 문제