我一直在为Visual Studio的调试器可视化器工作一段时间,而实际的可视化工作正常.问题是,在检查变量时,它始终将自己置于可视化列表的顶部,这些变量确实会使一些用户更喜欢Text作为最顶层的用户(因为最顶层的用户在打开VS时也是默认值).
我在DialogDebuggerVisualizer或DebuggerVisualizerAttribute上找不到任何支持,这是我的第一个想法,所以我一直在搜索SO/MSDN/Google,了解如何影响可视化器的排序顺序(最好把我的最后一个放在列表中) )但无济于事.
下面是我如何注册我的可视化工具,然后它只显示一个基于可视化值的表单.
using Microsoft.VisualStudio.DebuggerVisualizers;
[assembly: System.Diagnostics.DebuggerVisualizer(
typeof(Shorthand.VSAddins.JsonVisualizer.JsonVisualizer),
typeof(VisualizerObjectSource),
Target = typeof(string),
Description = "Json Visualizer")]
namespace Shorthand.VSAddins.JsonVisualizer
{
public class JsonVisualizer : DialogDebuggerVisualizer
{
protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
{
var json = objectProvider.GetObject() as string;
var form = new VisualizerForm { Json = json };
windowService.ShowDialog(form);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道是否有可能影响可视化器的顺序,还是应该让它成为现实?
我已成功制作了几个Visual Studio调试器可视化工具,并且它们工作得非常好,除了在某些对象上我尝试使用反序列化对象时出现超时错误 objectProvider.GetObject()
System.Exception: Function evaluation timed out.
at Microsoft.VisualStudio.DebuggerVisualizers.DebugViewerShim.PrivateCallback.MaybeDeserializeAndThrowException(Byte[] data)
Run Code Online (Sandbox Code Playgroud)
超时发生的时间相当快(可能在我点击可视化器图标后大约一秒钟),即使我的其他可视化工具工作正常,即使大型数据对象显示更长时间(5-10秒)仍然没有超时.
我已经创建了一个自定义对象源来限制序列化到我需要显示的字段.我还能做些什么来使数据反序列化而不超时?
我更新到最新版本的 Spyder (5.1.5),并且无论代码如何,我的调试器都在第一行挂起,没有响应。
以下是依赖版本:
我记得不久前遇到过这个问题,通过更新 Spyder 内核解决了这个问题,但这次没有解决。
有什么解决办法吗?
在Visual Studio 2010中进行调试并将鼠标悬停在变量名称上时,我可以选择使用3种不同的内置可视化工具:Text,XML和HTML.
这是我所指的一个例子:
由于我正在使用基于JSON的数据做越来越多的工作,我是否可以安装JSON可视化工具?
Visual Studio中的托管调试器(我使用的是11.0)显示包含双引号和反斜杠的字符串值,如下所示:
"{\"Text\":\"C:\\\\Temp\"}"
Run Code Online (Sandbox Code Playgroud)
偶尔我想以简单的形式显示像上面那样的转义文本:
{"Text":"C:\\Temp"}
Run Code Online (Sandbox Code Playgroud)
我知道文本可视化器可以通过值旁边的放大镜访问,但是在调试一些文本操作例程时这很麻烦.
有没有办法在调试器中更改字符串值的显示?
c# debugging debuggervisualizer visual-studio visual-studio-2012
每当我尝试打开DataTable或DataSet Visualizer时,它都会崩溃IDE.
我尝试了各种命令行开关来重置所有内容,在/ SafeMode中启动并进行了VS的修复.到目前为止,没有任何帮助.
据我所知,只有那两个可视化器崩溃了.
我也尝试使用/ Log开关启动VS,但不幸的是它似乎没有记录那里的崩溃...
我怎样才能找出问题并解决?
编辑:
似乎是4.0版之前的.NET Framework问题:https : //connect.microsoft.com/VisualStudio/feedback/details/1711642 https://connect.microsoft.com/VisualStudio/Feedback/Details/1709336
visualizer debuggervisualizer visual-studio visual-studio-2015
Visual Studio如何在C++中显示向量的元素或字符串的字符?有没有办法让我以自定义方式展示自己的课程?
我再次编写了一个外部调试器可视化工具,并且遇到了问题.调试器可视化工具可以返回的字符串大小似乎有限制.
Delphi 2010附带的TStrings调试器可视化器的限制为4K.在对Embarcadero新闻组发布的问题的回复中,Ewe Schuster 回答说"你可以稍微增加缓冲区,但AFAIR的实际限制是IOTAThread.Evaluate,限制大约12k字符."
我的调试器可视化器基于TStrings调试器可视化器的代码,我可以看到TFrame的Evaluate方法的实现包括ResultStr的以下声明,该声明用于返回从IOTAThread.Evaluate调用返回的字符串:
ResultStr: array[0..4095] of Char;
Run Code Online (Sandbox Code Playgroud)
我曾希望增加这个缓冲区的大小会有所帮助,但没有运气.
如果有的话,我可以做些什么来增加外部调试器可视化工具可以显示的字符串的大小?
我们有一个需要修复的bug,就像任何优秀的TDD从业者一样,我想编写一个失败的测试来代表bug.该错误在一个方法中,它采用相当复杂的类型作为输入.只有当复杂类型具有特定的属性值组合时,该错误才会重现.
到目前为止,我已经重现了该错误,并且在调试器中,可以查看复杂类型的运行时值.现在我需要在单元测试的"排列"部分中创建该复杂类型,以便我可以将其提供给单元测试的"Act"部分中的buggy方法.
我可以手工编写一个大对象初始化代码块,如下所示:
var cats =
new List<Cat>
{
new Cat {Name = "Sylvester", Age = 8},
new Cat {Name = "Whiskers", Age = 2}
};
Run Code Online (Sandbox Code Playgroud)
甚至是这样的:
var cats = new List<Cat>();
var cat1 = new Cat();
cat1.Name = "Sylvester";
cat1.Age = 8;
cats.Add(cat1);
var cat2 = new Cat();
cat2.Name = "Whiskers";
cat2.Age = 2;
cats.Add(cat2);
Run Code Online (Sandbox Code Playgroud)
没有什么花哨的.唯一的问题是"手工"部分 - 在我的情况下复杂类型并不像上面的例子那样微不足道.
我还可以在调试器中使用任何内置调试器可视化工具查看对象.所以我想我会编写一个自定义Debugger Visualizer,它将为我生成对象初始化代码.要使用它,我会在调试器中重现该问题,拉出QuickWatch窗口并选择我的自定义可视化工具.
另一种选择是编写一个自定义序列化实现,它将"序列化"到一个对象初始化代码块.使用它比仅仅拉动QuickWatch窗口要困难一些,但这可能有效.
在我自己解决这个问题之前,有没有人做过这样的事情?介意分享一个代码片段?或者有人会建议另一种方法吗?
PS在我的例子中,对象的类型是抽象基类的子类.只是想提一下.
我使用的是考虑boost::ptr_container
从响应结果这个问题.我对库的最大问题是我无法在调试器中查看集合的内容,因为MSVC调试器无法识别它,因此我看不到容器的内容.(所有数据都在void *
内部存储)
我听说MSVC有一个名为"调试器可视化器"的功能,它允许用户让调试器更聪明地处理这类事情,但我从来没有写过这样的东西,而且我对这些东西并不十分熟悉.
例如,比较boost::shared_ptr
MSVC自己的行为std::tr1::shared_ptr
.在调试器中(即在Watch窗口中),boost版本显示为用于实现共享指针的大量内部变量,但MSVC版本显示为指向对象的普通指针(并且shared_ptr
内部是隐).
我怎样才能开始使用或实现这样的东西?
c++ visual-studio-2010 debuggervisualizer visual-c++ boost-ptr-container
c# ×3
debugging ×3
c++ ×2
visual-c++ ×2
anaconda ×1
delphi ×1
delphi-2010 ×1
delphi-xe ×1
delphi-xe2 ×1
json ×1
python ×1
spyder ×1
unit-testing ×1
visualizer ×1