【C#】VisualStudio2017⼀边Debug,⼀边修改代码
好久没写C#了,最近在学习著名科学上⽹⼯具的源代码,想着可以边断点调试,边加上⼀些注释以⽅便理解,stackoverflow 和 msdn 随便翻了⼀下,竟发现了Debug新世界。
⼀. 原始需求
原始需求是这样,本来我只是希望在断点调试项⽬的时候,可以增加⼀些注释,以⽅便理解。
但是遇到⼀个问题:
在处于断点模式(Break Mode,即程序当前命中了断点,并在断点处阻塞着不能向下执⾏)时,是可以随意增加注释的:
当不处于命中断点的状态时(Debug Mode,程序正在跑呀跑呀跑~),如果我尝试增加注释,就会有这样的提⽰Changes are not allowed while code is running。
有⼩伙伴说可以⽤Bookmark,试了⼀下也不知道是怎么玩的。
之前在XCode中写Objective-C Debug时,注释都是可以随便加的,⽆论是否处于 Debug Mode 下或处于Break Mode(当前命中了断
点)!
⼆.惊喜的发现
visual studio代码大全随便逛逛 stackoverflow 和 Microsoft blog,惊喜的发现,原来早在Visual Studio 2013,就可以在断点模式(Break Mode)下增加注释,⽽且,还可以修改代码,编译器和根据你修改的代码实时改变代码运⾏过程中的流程()。
举个例⼦就可以清晰地明⽩:
以下是⼀个基于MVC5的Web Application,此时根据变量a的值决定是否进⼊if内部,显⽽易见,这时候肯定是会进⼊if内部的:
现在,我将if(a)修改为if(b)(这时候编译器会根据代码的修改,⽴刻编译),并且step into往下⾛,竟然发现,我可以实时的改变代码,且改变代码的执⾏流(修改后,不满⾜if的条件,因此不会return Content("ss"))。
在之前的使⽤中,如果我发现这⾥的判断条件需要修改,且我仍然需要动态调试,我会Stop debugging(Shift + F5),将if(a) 修改为 if(b),Start Debugging,最终代码断点执⾏到这个位置。
三.如何开启Edit and Continue
从Visual Studio 2013开始,这⼀功能是默认开启的。当然我现在⽤的是Visual Studio 2017啦,爽爽哒。
如果你发现这个功能不能使⽤,你需要在你的Project和Visual Studio中分别检查是否正确设置了:
1.检查在Project中是否开启了这⼀功能:
对于Web Application是可以在Project中⼿动开启和关闭的(在 WinForm 的 Project 中好像我没有到设置):
2.检查在Visual Studio中是否开启了这⼀功能:
[Tools / Options]
搜索Enable Edit and Continue,并勾选
四.⼀些不能使⽤的场景
官⽅指出有些场景下是明确不能使⽤的, From :
Mixed-mode (native/managed) debugging.
SQL debugging.
Debugging a Dr. Watson dump.
Editing code after an unhandled exception, when the Unwind the call stack on unhandled exceptions option is not selected.
Debugging an embedded runtime application.
Debugging an application with Attach to rather than running the application with Start from the Debug menu.
Debugging optimized code.
Debugging managed code when the target is a 64-bit application. If you want to use Edit and Continue, you must set the target to x86.
(Project Properties, Compile tab, Advanced Compiler setting.).
别⼈踩的坑,mark ⼀下:
五.参考
from:swsmile.info/2017/04/03/%E3%80%90C-%E3%80%91Visual-Studio-2017-
%E4%B8%80%E8%BE%B9Debug%EF%BC%8C%E4%B8%80%E8%BE%B9%E4%BF%AE%E6%94%B9%E4%BB%A3%E7%A0%81/

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。