0

我有一个自定义域特定语言 (DSL) 和一个采样性能分析器,它生成类似于其他分析器的数据馈送(当前堆栈跟踪、包含样本、独家样本等)。我希望利用现有的 GUI 来更好地可视化分析器结果,但无法找到以这种方式可插入/可扩展的 GUI。

此外,DSL 在计算集群中运行,因此任何可以同时为单个节点或多个节点分割和切块数据的 GUI 都是理想的。最终我想将它集成到视觉工作室中,但此时我会为任何事情感到高兴。感谢您的建议!

4

1 回答 1

1

我怀疑你是否会找到这样一个你可以为自己的目的利用的 UI。

不过写一个应该不难,不像Zoom中的那个,或者像我几年前做的这个,通常称为蝴蝶视图,但对于代码行,而不是函数:

在此处输入图像描述

它很容易编程。您有一些堆栈跟踪,每个堆栈跟踪都由一系列代码行组成,其中每一行代码代表对函数的调用,“底部”行除外。假设您有 100 个堆栈跟踪。

在任何时间点,您都有一个特定的代码行,即“焦点”,在这种情况下foo.cpp: 326。这33%是包含该行的堆栈跟踪的一部分(即使该行在某些跟踪上出现多次)。该百分比大致是如果可以删除该行可以节省多少总时间,这就是它的责任。

在这 33 个堆栈跟踪中,它说线条出现在其中 25 个和其中8 个gzorn.cpp: 99的焦点线上方。foo.cpp:105(这是递归的情况。请注意是否存在递归,祖先或后代不必加起来与焦点线相同的百分比。)

它还说明了通过该行的 33 个堆栈跟踪,其中 16 个bar.cpp:45是下一行,其中 10 个有bar.cpp:10,其中 7 个有bar.cpp:17

或者,您可以在每条线上显示穿过线的迹线部分。

然后用户可以通过单击这些“邻居”中的任何一个来改变焦点来寻找昂贵的代码行。

请注意这是多么容易编程。除了堆栈跟踪本身之外,您不需要任何数据结构,也不需要计算任何统计信息。更重要的是,您不必拥有大量的堆栈跟踪,因为这样做只会使百分比更加精确,这并不是特别重要。

PS我差点忘了提。您的堆栈跟踪不仅应在 CPU 时间期间进行,而且应在 I/O 或其他阻塞时间期间进行。这很关键,因为程序通常会由于 I/O、睡眠、资源等待等原因而变慢,您需要知道这一点。如果您仅仅因为与其他进程的竞争而担心速度缓慢,那么这并不是真正的问题,因为它不会过多地甩掉百分比。

于 2012-05-22T12:37:16.633 回答