visual-studio - 在监 window 口中显示序列

标签 visual-studio debugging f#

有什么方法可以让 Visual Studio 调试器显示 F# seq 的内容表达?

Visual Studio 知道 IEnumerable<T>对象并在监 window 口内为您提供结果 View 。如果您在监 window 口中查看其中一个,您会得到一堆私有(private)字段。

一些潜在的替代方案:

  • fsi.exe 在打印序列方面做得很好,但它不与调试器交互
  • 想办法调用Seq.toArray从调试器内部。我找不到从即时窗口调用它的正确语法。
  • 写一个可视化器。我不知道是否可以将 vizualisers 附加到 Microsoft 类型。
  • 还有什么……?

  • 编辑:进一步调查显示 F# 的 seq对象实现 IEnumerable<T>很好——它们就这样出现在监 window 口中——但由于某种原因,结果 View 没有出现。

    但是,F# seq对象似乎不是普通的 IEnumerables;相反,它们看起来是来自 Seq 中的函数的闭包。模块。 (F# seq 对象看起来是使用 { new IEnumerable with ... } 创建的实例。)

    最佳答案

    一种方法是使用 Results在 Visual Studio 2008 中添加的 View 节点。如果将 System.Core.dll 加载到进程中,则任何实现 IEnumerable<T> 的类型展开时将获得一个名为 Results 的额外节点.展开该节点将枚举 IEnumerable<T>并显示结果。

    F# 类型 seq只是 IEnumerable<T> 的别名所以它得到了同样的好处。

    results view

    默认情况下,您在 F# 中看不到这一点,因为它不使用 System.Core 中的任何类型。但是您可以使用以下行强制此 DLL 进入进程。

    // Force System.Core into the process
    let x = typeof<System.Linq.Enumerable>
    

    关于visual-studio - 在监 window 口中显示序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3512266/

    相关文章:

    c++ - GetWindowPlacement x & y 位置

    c# - 如何使用 Visual Studio 2019 清理/检查 blazor 组件中的代码

    debugging - C++\CLI 应用程序在加载时崩溃

    f# - 如何从 F# 控制台应用程序写入 appSettings?

    concurrency - F#中的并行处理

    visual-studio - 32位版本的Visual Studio Remote Debugging Monitor无法调试64位进程?

    visual-studio - Visual Studio 2015 - 无法从工作项描述字段打开指向工作项的链接

    c++ - Eclipse 中的 C/C++,我可以使用 #define 来设置断点,但只能在单步执行代码时使用吗?

    visual-studio-2008 - 为什么在 VS2008 中 F10 这么慢?

    f# - 如何使用无法在 F# 中控制其类型定义的操作数来定义重载运算符?