在Visual Studio中记录调用堆栈

时间:2009-10-13 21:25:14

标签: visual-studio debugging

我正在尝试在Visual Studio中调试一个非常大的c ++ / c程序。更改一个参数的值会显着改变结果。我想记录两个运行的调用堆栈并区分它们。

有人知道如何将调用堆栈转储到VS中的文件而不设置断点并在窗口中使用Select ALL / Copy吗?

感谢。

2 个答案:

答案 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)即可。