当断点被触发时执行代码?

13
在立即窗口中,我可以执行一行代码。我还可以在特定点设置断点,以便当达到断点时,程序停止,我可以在立即窗口中运行我的代码行。是否有任何方式(包括扩展)可以自动执行此操作?

1
你尝试过使用debug.print吗? - Richard
所以你想要自动化调试?! - banging
为什么你不直接修改程序呢? - David
3
我不知道有没有相关的资料,但是你可以使用“当命中”对话框将内容输出到“调试输出”窗口。这种方法非常灵活,还可以很好地与条件断点结合使用。 - Anton Tykhyy
也许#if DEBUG是你想要的? - Johan Larsson
我知道在断点处打印代码的能力,确实非常有用 - 我想要的是能够在断点被触发时执行任意代码,这样我就可以进行实验而不需要每次重新编译。也许我需要考虑编写一个扩展程序。 - Alex
2个回答

18

或多或少。 您可以右键单击任何断点并选择“操作...”(VS 2017,以了解更早版本的信息)

里面唯一的选项是打印消息,这通常足够了,但是您也可以在其中运行任意代码。例如:{Console.WriteLine("Hello World")}

Visual Studio 2017操作断点的屏幕截图

在Visual Studio的早期版本中,该选项可通过右键单击并选择“When Hit ...”来使用:

Visual Studio When-Hit断点的屏幕截图

这将输出:

Hello World
表达式已被评估并且没有值

这意味着您可以调用任意方法。 任何其他副作用将传递给正在运行的应用程序。 我有时会使用它来临时修补代码问题,而无需重新启动64位应用程序。

请记住,与正常程序执行相比,这特别慢。


你能把对话框中的文本复制粘贴一下吗?我的工作过滤器无法查看imgur图片。谢谢!(我猜这是任何代码表达式,这很有道理) - Alex
@AlexG 我已经将文本放在图像描述中,但我会编辑它以出现在帖子中。 - Thorarin
哦,我明白了,我认为替代文本与输出略有不同(“Hallo” vs “Hello World”),但我懂了。谢谢 :) - Alex
不支持在VS2017中使用。 - James Wierzba
@JamesWierzba,它是可用的,但在VS2017中被称为“Actions...”。 - Thorarin

2

对于Visual Studio 2017的答案与Thorarin的答案类似,但一些UI组件已经发生了变化。

在Visual Studio 2017中,您要查找的菜单项是“操作(Actions)”。

右键单击断点,选择“操作(Actions)”,然后将您希望执行的代码放置在“将消息记录到输出窗口”字段的括号 { .. code to execute .. } 中。


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