在 Visual Studio 中,我可以在断点处绘制我的变量吗?

Posted

技术标签:

【中文标题】在 Visual Studio 中,我可以在断点处绘制我的变量吗?【英文标题】:In Visual Studio can i plot my variable in breakpoint ? 【发布时间】:2009-01-30 08:56:10 【问题描述】:

在我的原生 C++ 程序的 Visual Studio 中,我想在调试期间获取一些变量的图。大多数情况下,我通过编辑 autoexp.dat 来使用对象的文本表示。但是对于某些变量,最好有一个图而不是文本形式的值。

到目前为止,我已经使用了一个函数 plot(const void* address,const char* type),并从 即时窗口 中调用它,并给出变量地址和类型,并在内部将其转换为正确的类型。

但是这种方法有两个缺点:

首先,从调试器调用函数时,函数重载几乎永远不会起作用(因此我必须将类型作为第二个参数传递),并且函数调用偶尔会崩溃,尽管从代码中调用时它可以正常工作。李> 第二个是,我有兴趣拥有一种脚本语言(如 autoexp.dat 或 VBScript)来提供 C++ 对象的内部数据,而不是编写用于绘图的 C++ 函数任何包装器,以便我可以使用脚本将数据存储在文件中或绘制它。

一般来说,我有兴趣拥有像 MatlabCh IDE 之类的东西,当程序处于调试中断时,我可以在其中从外部绘制某些变量。

【问题讨论】:

当你说“情节”时,你的意思是在调试中断时拥有所有关于变量的信息吗?不是很清楚…… 一般来说,使用“绘图”我的意思是可以访问我可用的变量/对象的所有数据,以便我可以以任何形式表示它(比如以特定格式存储在文件中)在这个特定的上下文中,“绘图”意味着只是将它绘制在屏幕上(就像我可以将向量/数组绘制为 2D 图) 【参考方案1】:

自 VS 2005 起,Visual Studio 已包含 Visualizers,它几乎可以专为您的问题而设计。 MSDN 比我能更好地解释这个概念:

可视化器是 Visual Studio 调试器用户界面。 可视化器创建一个对话框或 显示变量的其他界面 或以有意义的方式反对 适合其数据类型。为了 例如,一个 html 可视化器解释 一个 HTML 字符串并显示结果 就像它出现在浏览器中一样 窗口,位图可视化器解释 位图结构并显示 它代表的图形,等等。一些 可视化工具也允许您进行编辑 作为查看数据。

请参阅here 获取有关如何编写的教程。

【讨论】:

展示台很好。但不幸的是,我还没有找到任何合适的方法将它用于本机 C++ 应用程序。它们适用于基于 .NET 的应用程序。 混合 C++ / C++CLI 应用程序?似乎存在限制,因为 Visualizer 的调试端需要公开一个 .NET 接口。从哪里获取数据并不重要。【参考方案2】:

您可以使用NetDebugPlot 和NetDebugLog 在实时图表中绘制变量。

#include "NetDebugLog.h"

NetLog(myvar);
NetLog("test", myvar2);

【讨论】:

这个不错,但是 NetDebugPlot 程序总是崩溃【参考方案3】:

正如其他人所指出的,我不确定您想要绘制什么。我通常理解,当有人说他想“绘制一些东西”时,他通常指的是一些带有数值的数组。 如果您的情况属实,英特尔的Array Visualizer 可能会有所帮助。它可以免费下载,它集成到 Visual Studio 中,您可以通过两种方式使用它:作为独立应用程序或在调试时(“在某个断点时”),这样您就可以在“程序运行时”绘制数组值。

【讨论】:

【参考方案4】:

您可以为此使用gnuplot 吗?将要绘制的数据作为调试打印输出,然后在您处于断点处时,将其复制到外部文件并通过绘图仪运行。

【讨论】:

以上是关于在 Visual Studio 中,我可以在断点处绘制我的变量吗?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2010 C# 调试器不会在新断点处停止

Visual Studio 2010:在断点处停止调试器过夜 = 在下一步后冻结

Visual Studio 代码调试器未在 SAM Local 的断点处停止

visual studio 2012如何调试和运行程序?

Visual Studio JavaScript 调试极慢

在进程退出时中断 Visual Studio