使用“并行堆栈”窗口
,在调试多线程应用程序时, 并行堆栈 窗口非常有用。其 线程视图 显示所有线程的调用堆栈信息。您的应用程序。它使您得以在线程和堆栈帧之间在这些线程。在托管代码中, 任务视图 显示调用堆栈 System.Threading.Tasks.Task 对象。在本机代码中, 任务视图 显示调用堆栈 任务组、 并行算法、 异步代理和 轻量级任务。
线程视图
下图显示从 main 执行到 A 再执行到 B 外部代码的一个线程。从某个外部代码开始的其余两个线程然后执行的,但是,其中一个线程继续执行到 B 再到某个外部代码,并且,另一个线程继续执行到 C 然后到某个 AnonymousMethod。
在图示中,当前线程的调用路径突出显示为蓝色,,活动堆栈帧由黄色箭头表示。通过选择在 并行堆栈 窗口的不同方法更改当前堆栈帧。这可能导致切换当前线程,具体取决于所选方法是否已当前线程的一部分或的另一个线程。如下图所示,下表描述 并行堆栈 窗口的主要功能。
标注字母 |
元素名称 |
说明 |
---|---|---|
A |
调用堆栈段或节点 |
包含一个或多个线程的一系列方法上下文。如果节点没有连接箭头线,则表示线程的整个调用路径。 |
B |
蓝色突出显示 |
指示当前线程的调用路径。 |
C |
箭头线 |
连接节点组成线程的整个调用路径。 |
D |
在节点标头的工具提示 |
显示其调用路径共享此节点的每个线程的 ID 和用户定义的名称。 |
E |
方法上下文 |
表示同一方法中的一个或多个堆栈帧。 |
F |
在方法上下文的工具提示 |
在线程视图中,在表中显示所有线程类似于 线程 窗口。在任务视图,它在表中显示所有任务类似于 并行任务 窗口。 |
此外,在中,当关系图太大而无法放入窗口时, " 并行堆栈 " 窗口会在主窗格中显示一 大致的视图 图标。您可以单击图标可在窗口中查看整个关系图。
方法上下文图标
下表描述提供有关有效和当前堆栈帧的信息的图标:
图标 |
说明 |
指示方法上下文包含当前线程的活动堆栈帧。 |
|
指示方法上下文包含非当前线程的活动堆栈帧。 |
|
指示方法上下文包含当前堆栈帧。方法名称为粗体会出现的所有节点。 |
工具栏控件
下面的图和表介绍可在并行堆栈工具栏上的控件。
标注字母 |
控制 |
说明 |
---|---|---|
A |
线程/任务组合框 |
调用堆栈之间切换视图线程的调用堆栈和任务。有关更多信息,请参见任务视图和线程视图。 |
B |
仅显示已标记项 |
仅显示调用堆栈在其他标记调试窗口,例如 GPU 线程 窗口和 并行监视 窗口的线程的。 |
C |
切换方法视图 |
在堆栈视图和方法视图之间切换。有关更多信息,请参见方法视图。 |
D |
自动滚动到当前堆栈帧 |
自动滚动关系图,从而使当前堆栈帧。此功能很有用,当您从其他窗口更改当前堆栈帧时,或者当在大型关系图中命中新断点。 |
E |
切换缩放控件 |
显示或隐藏缩放控件。您可以通过按住 ctrl 并滚动鼠标滚轮来进行缩放,无论缩放控件的可见性。 |
上下文菜单项
下面的图和表介绍可用快捷菜单项,当您右击线程视图或任务视图的方法上下文时。最后六项直接从 " 调用堆栈 " 窗口借用而来不引入新行为。
菜单项 |
说明 |
---|---|
标志 |
标记选定项。 |
取消标志 |
Unflags 选定的项。 |
冻结 |
冻结选定项。 |
解冻 |
解冻选定项。 |
转到任务 (线程) |
执行函数与工具栏上的组合框相同,但是,突出显示同一堆栈帧。 |
转到源代码 |
导航到堆栈帧对应用户右击的源代码的位置。 |
切换到帧 |
与 " 调用堆栈 " 窗口中相应的菜单命令相同。但是,使用并行堆栈,多个帧可能对应于一个方法上下文。因此,该菜单项具有子菜单,每个表示特定堆栈帧。如果其中一个堆栈帧位于当前线程,则该堆栈帧对应的菜单选择。 |
转到反汇编 |
导航到堆栈帧对应用户右击的反汇编窗口的位置。 |
显示外部代码 |
显示或隐藏外部代码。 |
十六进制显示 |
在十进制和十六进制显示之间切换。 |
符号加载信息 |
显示相应的对话框。 |
符号设置 |
显示相应的对话框。 |
任务视图
如果应用程序使用 System.Threading.Tasks.Task 对象 (托管代码) 或 task_handle 对象 (本机代码) 来表示并行度,则 " 并行堆栈 " 窗口工具栏可以使用组合框切换到 任务视图。任务视图显示调用堆栈任务而不是线程。任务视图与线程视图不同如下所示:
不运行任务未显示线程的调用堆栈。
运行任务以可视方式调整在顶部和底部显示最密切的帧与任务的线程的调用堆栈。
当多个任务在一个线程时,这些任务的调用堆栈拆分为单独的节点。
下图右侧显示和对应的并行堆栈任务视图左侧的视图。
若要查看整个调用堆栈,切换到线程视图通过右击堆栈帧然后单击 转到线程。
如上表所述,将鼠标指针悬停在方法上下文中,可以看到附加信息。下面的图像在线程视图和任务视图的工具提示显示信息。
方法视图
在线程视图或任务视图中,可以通过单击 " 方法视图 " 图标。轴上旋转在当前方法的关系图工具栏上。方法视图非常清晰地显示在所有线程上的所有方法。当前方法调用或调用。下图显示线程视图,以及同样的信息在方法视图查找。
通过切换到新的堆栈帧,可使该方法成为当前方法并在窗口中显示所有调用方和被调用方新方法的。这可能会导致某些线程显示或从视图中消失,具体取决于是否显示该方法在其调用堆栈。若要返回堆栈视图,请再次单击 " 方法视图 " 工具栏按钮。