Visual Studio 2015调试:无法展开本地变量?

46
我正在使用Visual Studio 2015预览版,尝试调试我的项目。之前我使用的是VS 2012,并且很大程度上依赖于能够悬停并展开本地变量以查看其值。现在我正在2015中尝试这样做,但当我悬停在变量上时,出现的框只显示“(local variable) Classname variablename”(例如“(local variable) String title”)。没有展开按钮,也不在框中显示变量的值。
是否有设置需要更改才能悬停在变量上并展开它们?

1
请问您能否尝试更新到最新的CTP版本?这可能是一个已经修复的已知问题。如果问题仍然存在,请提供一个可重现的项目和步骤(可以使用连接或者Visual Studio中集成的反馈工具)。谢谢! - Maria
同样在VS2019预览版中遇到了这个问题,但是解决方案已经不存在了,请让我知道是否有人知道适用于VS2019的解决方案。 - jsmars
10个回答

92

可能是一个bug。如果你有相关的问题,请提交Connect bug并提供重现步骤。

同时,您可以通过设置调试器选项,使用传统的调试引擎来解决该问题:工具 -> 选项 -> 调试 -> 通用:勾选“使用传统的C#和VB表达式求值器”和“使用托管兼容模式”。

这种解决方法每次对我都有效。但是请务必仍然提交错误报告!

选项窗口


5
很不幸,这对我的问题没有用,虽然我的问题与原帖相似,但并不完全相同。在我的情况下,在VS 2015中悬停在变量上只对某些变量有效,而对其他变量无效。如果我找到解决方案/解决方法,我会发帖分享。 - ajpetersen
很快就找到了一篇关于在VS中重置设置的文章,链接在这里:http://bit.ly/1Ir4yFv。 - ajpetersen
2
我认为“使用托管兼容模式”就足够了。需要进行更详细的测试,但在选中此选项后,我能够看到本地变量调试值。 - SerjG
11
@AlexLogan,这个问题在VS2015更新3中仍然存在! - eestein
谢谢!默认设置“使用托管兼容模式”处于关闭状态真的很烦人。 - florien
显示剩余9条评论

20

我遇到了类似的问题,当我悬停在本地变量上时,有些可以让我更深入了解,而有些则不会显示任何内容。经过一番挖掘,我在msdn上发现了一篇文章这里,建议重置VS中的设置。一旦我这样做了,我收到了通知,说我正在运行发布模式,并且某些调试功能可能不可用。一旦我切换到调试模式,一切都像正常一样工作。

希望这对您也有帮助。


1
我也遇到了同样的问题,解决方法是从Release切换到Debug模式。 - Cristian E.

10

此处所述,您需要在“调试”->“选项”->“调试”->“常规”中启用“在模块加载时抑制JIT优化(仅托管)”选项。

您还需要在项目属性中取消“优化代码”标志。


7

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

启用Andrew Arnott提供的以下设置解决了我的问题: 工具 -> 选项 -> 调试 -> 通用:“使用传统的C#和VB表达式求值器”


2
在我的情况下,解决方案配置设置为调试,但解决方案平台设置为混合平台。将解决方案平台设置为任何CPU即可解决问题。

enter image description here


1
我发现了一种方法,可以在使用CLI进行调试时打破本机代码并访问STL容器的内容:
工具\选项…\调试\常规: 取消选择“使用托管兼容性模式”(是的!取消它!)
在本机代码中,而不是添加断点,只需添加以下内容:
assert(false);
当打破海岸线时,只需单击“重试”以进行调试或“忽略”以继续。
祝您使用Visual Studio 2015调试愉快 :)
Kochise

1
我发现只需将“Release and debug”组合框改回debug,就可以在调试代码时再次看到变量的扩展。这个最新的解决方法适用于我家里的PC上的VS 2017。在我进行“Build >> Clean Solution”操作后,我的工作电脑也能在2017中显示这个扩展,并且即使组合框设置为“Release”,也能正常工作。祝愿其他想要从VS中获得这种奇妙的调试帮助的人好运。我希望通过使用其中一种方法,你们能够恢复“正常”。

0
我有一个项目使用压缩的 JavaScript 文件,想要使用 TypeScript 文件进行调试。我将未压缩的 JavaScript 和相关的 TypeScript 放入项目中,并更改了引用以使用普通的 JavaScript 文件而不是压缩的文件。我的断点在 TypeScript 文件中被触发,但我没有获得悬停信息(令人惊讶的是,似乎将对象/变量作为监视项添加起作用了)。
为了修复这个问题,我只需将压缩的 JavaScript 文件从项目中排除,并包含 JavaScript 文件即可。(我保留了被排除的 TypeScript 文件。)

0

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

项目 -> 属性 -> C/C++ -> 代码生成 -> 运行时错误检查 ->\RTC

还可以尝试停用优化选项,因为使您的代码更快可能意味着无法查看本地变量的值:

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


-1

我正在使用“Debug”配置进行工作,未设置优化,因此我重复:

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

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

因此,在不使用托管兼容性时,使用断言作为断点可以让您既停在需要的地方又监视值。

试试看。

我向您提供了我的诀窍,因为我现在正面临同样的问题,在最后交付前1周。而微软声称计划在更新2中完全修复2016年问题,这是难以忍受的。

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

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

Kochise


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接