【问题标题】:Visual Studio 2015 Debugging: Can't expand local variables?Visual Studio 2015 调试:无法扩展局部变量?
【发布时间】:2022-01-11 05:12:04
【问题描述】:

我正在使用 Visual Studio 2015 预览版,并且正在尝试调试我的项目。我之前使用的是 VS 2012,很大程度上依赖于能够将鼠标悬停在局部变量上并展开局部变量来查看它们的值。我现在正在尝试在 2015 年执行此操作,但是当我将鼠标悬停在一个变量上时,显示的框只显示“(局部变量)类名变量名”(例如“(局部变量)字符串标题”)。没有展开按钮,也没有在框中显示变量的值。

我是否必须更改某个设置才能将鼠标悬停在变量上并展开它们?

【问题讨论】:

  • 您也可以尝试更新到最新的 CTP 吗?这可能是一个已经修复的已知问题。如果它仍然重现,请给我们一个重现项目和步骤(连接或现在集成在 VS 中的反馈工具)。谢谢!
  • 在 VS2019 预览版中也得到了这个,但解决方案不再存在,如果有人知道适用于 VS2019 的解决方案,请现在告诉我

标签: debugging variables visual-studio-2015


【解决方案1】:

这可能是一个错误。 file a Connect bug如果你有一个repro。

与此同时,您可以通过设置调试器选项以使用旧版调试引擎来解决该问题:工具 -> 选项 -> 调试 -> 常规:选中“使用旧版 C# 和 VB 表达式评估器”和“使用托管兼容模式”。

这种解决方法每次都对我有用。但是,请仍然提交错误!

【讨论】:

  • 不幸的是,这对我的问题不起作用,这与 OP 相似,但不完全相同。就我而言,将鼠标悬停在我的变量上仅适用于 VS 2015 中的某些变量而不适用于其他变量。当我找到一个解决方案/解决方法时,我将发布。
  • 那很快,我在这里找到了一篇关于 msdn 的文章:bit.ly/1Ir4yFv 建议重置 VS 中的设置。
  • 我认为“使用托管兼容模式”就足够了。需要做更详细的测试,但是勾选这个选项后,我能够看到局部变量调试值
  • 非常感谢!我有一个类似的问题(stackoverflow.com/questions/36353390/…),这对我有用。但我不禁想知道,应用这些更改时我会失去什么?
  • @AlexLogan 这个问题在 VS2015 更新 3 中仍然发生!
【解决方案2】:

我有一个类似的问题,当我将鼠标悬停在我的局部变量上时,有些会让我更深入,有些不会显示任何东西。经过一番挖掘,我在 msdn here 上找到了一篇文章,建议在 VS 中重置设置。一旦我这样做了,我就会收到一条通知,我正在以发布模式运行,并且某些调试功能可能不可用。切换到调试模式后,一切正常。

希望这对你也有用。

【讨论】:

  • VS2015 也为我工作,从 Release 切换到 Debug。
【解决方案3】:

here 所述,您需要在Debug --> Options --> Debugging --> General 中启用检查“Suppress JIT optimizations on module load (Managed only)”。

您还需要删除项目属性中的“优化代码”标志。

【讨论】:

    【解决方案4】:

    我在 VS2015 中遇到了类似的问题,其中一些变量会显示调试值,而其他变量在悬停时不会显示任何内容。

    从 Andrew Arnott 启用以下设置解决了我的问题: 工具 -> 选项 -> 调试 -> 常规:“使用旧版 C# 和 VB 表达式求值器”

    【讨论】:

      【解决方案5】:

      在我的例子中,Solution Configuration 设置为 Debug,但 Solution platform 设置为 Mixed Platforms .将 Solution Platform 设置为 Any CPU 解决了问题

      【讨论】:

        【解决方案6】:

        我发现了在使用 CLI 进行调试时闯入本机代码并访问 STL 容器内容的方法:

        Tools\Options...\Debugging\General :取消选中“使用托管兼容模式”(是!取消选中!)

        在本机代码中,要添加断点,只需添加以下内容:

        断言(假);

        当冲向海岸时,只需单击“重试”进行调试或单击“忽略”继续。

        使用 Visual Studio 2015 进行愉快的调试 :)

        小智

        【讨论】:

          【解决方案7】:

          我发现只需将带有“发布和调试”的组合框更改回调试即可让我在再次调试代码时看到变量的扩展。

          这个最新的解决方案适用于我家用电脑上的 VS 2017。

          在我执行“构建>>清洁解决方案”选项后,我的工作 PC 能够在 2017 年显示此扩展,甚至在组合框设置为“发布”时也可以工作。

          祝所有想要 VS 的出色调试帮助的人好运。我希望通过使用其中一种方法,您能够恢复“正常”。

          【讨论】:

            【解决方案8】:

            我有一个项目正在使用缩小的 JavaScript 文件,并希望使用 TypeScript 文件进行调试。我将未缩小的 JavaScript 和相关的 TypeScript 放入项目中,并将引用更改为使用普通的 JavaScript 文件而不是缩小的文件。我的断点在 TypeScript 文件中被击中,但我没有获得悬停信息(令人惊讶的是,它看起来像添加对象/变量,因为手表似乎可以工作)。

            为了解决这个问题,我刚刚从项目文件中排除了缩小的 JavaScript,并包含了 JavaScript。 (我排除的 TypeScript 文件)。

            【讨论】:

              【解决方案9】:

              这在 VS2017 中对我有用(我的 VS 是德语,所以选项卡名称可能有点不同):

              项目 -> 属性 -> C/C++ -> 代码生成 -> RunTimeErrorCheck->\RTC

              还可以尝试停用优化选项,因为加快代码速度可能意味着无法查看局部变量的值:

              项目 -> 属性 -> C/C++ -> 优化 -> 禁用

              【讨论】:

                【解决方案10】:

                我正在处理没有优化设置的“调试”配置,所以我重复一遍:

                使用托管兼容性:可以使用断点,但不能监视值

                不使用托管兼容性:不能使用断点,但可以观察值

                因此,在不使用托管兼容性时使用断言作为断点可以让您在需要的地方停止并观察值。

                试试看。

                我向您提供了我的技巧,因为我现在正面临同样的问题,距离最终交付还有 1 周。而 MS 假装计划在更新 2 中为 2016 年进行完整修复简直令人无法忍受。

                顺便说一句,这又是一个完美的“休息”:

                int *p = NULL, i = 1 / *p;

                小智

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-05-03
                  • 1970-01-01
                  • 2016-04-28
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多