我正在尝试在Visual Studio中调试一个非常大的c ++ / c程序。更改一个参数的值会显着改变结果。我想记录两个运行的调用堆栈并区分它们。
有人知道如何将调用堆栈转储到VS中的文件而不设置断点并在窗口中使用Select ALL / Copy吗?
感谢。
答案 0 :(得分:2)
请查看使用codeproject example API的StackWalk64。
答案 1 :(得分: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)
即可。