首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Visual Studio中,有没有办法在“全部中断”之后停留在当前文档中?

在Visual Studio中,有没有办法在“全部中断”之后停留在当前文档中?
EN

Stack Overflow用户
提问于 2013-02-01 19:56:38
回答 3查看 2.1K关注 0票数 17

当我在调试时“全部中断”时,Visual Studio会在堆栈顶部打开源代码;我希望将光标保持在当前正在处理的文档上,而不打开任何其他文档或窗口(例如:没有加载任何符号)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-06 18:24:20

有一种方法可以停留在当前文档上,但这需要在“调试”工具栏中创建一个Visual Studio外接程序和一个新的UI命令。这个答案的功劳实际上也应该归功于openshac,他发布了一个类似的SO question,并在他的OP中使用宏给出了一个变通方法。

它的实现相当简单(我花了几分钟才让它工作)。首先,在外接程序项目中,修改Connect.cs文件中的Exec方法,如下所示:

代码语言:javascript
复制
public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled)
{
    handled = false;
    if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
    {
        if(commandName == "BreakInCurrentDocument.Connect.BreakInCurrentDocument")
        {

            // here's where the magic happens
            // ******************************
            var activeWindow = _applicationObject.ActiveWindow;
            _applicationObject.Debugger.Break();
            if (_applicationObject.ActiveWindow != activeWindow)
            {
                _applicationObject.ActiveWindow.Close(vsSaveChanges.vsSaveChangesNo);
            }
            // ******************************

            handled = true;
            return;
        }
    }
}

创建并注册外接程序后,只需:

在Visual Studio的“工具栏”单选“menu

  • Customize

  • Commands

  • Choose”“button

  • Select”“
  1. Add menu
  2. Customize
  3. Commands
  4. Choose...上单击“TOOLS”。
  5. 从“外接程序”类别中,选择您的自定义外接程序。

就这样。

票数 11
EN

Stack Overflow用户

发布于 2013-02-07 09:26:40

http://visualstudiogallery.msdn.microsoft.com/a83505c6-77b3-44a6-b53b-73d77cba84c8提供的最新版本的VSCommands扩展(免费版本)正好满足了您的需求。它在调试工具栏和调试菜单中添加一个在当前文档中的分隔符按钮:

http://vscommands.squaredinfinity.com/Media/VSCommands/BlogPost//blog/breakincurrentdocument.png

票数 10
EN

Stack Overflow用户

发布于 2013-02-06 17:06:11

这是一个特性..当你“打破所有”的时候,就会假设你的进程已经挂起了。您可能对这种情况感兴趣的第一件事是- WHERE。因此,它直接将您引导到正在执行的“当前”位置。IIRC,这是所有低级调试器事实上的标准。如果你不想要“无符号加载”,只需标记“show disasembly”,它就不会再弹出:)(当然,你会看到确切的停止点。是的,这也是我自己用来调试未知库代码的一个功能。)

另一方面,如果你知道在你想让代码停止的地方,那么就把断点放在那里。

另一方面(就像我们有三个),如果你想真正停止应用程序--停止它,不要中断,只需停止。

我感觉到你的实际问题在于你以错误的方式使用了其中一个功能,因此另一个功能就会困扰你。请告诉我,您使用"break all“来做什么,以及它如何/为什么与您当前的文本编辑发生冲突。为什么你不在这里停下来或停下来呢?还是“分离”?

无论如何,我不得不承认,作为一个特性,为了IDE的可配置性,应该有一些关闭它的选项。

编辑

AAhh..你是对的。我已经完全忘记了辉煌的编辑&继续。我不是在开玩笑/开玩笑,E&C是一个很棒的功能,我希望所有其他平台都能有。我都忘了,因为...我广泛使用lambdas、泛型、foreach等有效阻止编辑并继续的特性。

无论如何,重点是,既然编辑并继续是你想要使用的黄金特性--应用程序必须处于“中断”模式。然而,无论如何“中断”/“暂停”等等,IDE会假设暂停是你的目标,而不是编辑,因此它会显示你在哪里暂停了应用程序。

MSVS中有一些选项,比如“只显示我的代码”,可能会对您有所帮助,但它不会解决问题:调试过程中的“编辑并继续”是为“小型本地编辑”而设计的。比如,用if(x<0)throw new uncaught()代替if(x>0)throw new uncaught()。您的应用程序在断言或断点停止并即将崩溃,第一次更改异常处理程序被触发,这是您的机会!展开崩溃处理程序,更正代码,然后运行。在中,作为即时补丁的一种方式,您让停止的同一个方法中的所有内容都出现在中。

这是你为什么不能在E&C会话中添加方法,类,修改泛型等的主要问题之一: ie。编辑您当前的lambda或当前foreach可能是可以的,但IDE将无法重新定位流程并正确执行新代码。这有点类似于您有时会看到"stale code“警告的原因,但使用这些代码构造更难分析,因此无法实现。而且可能永远不会排在微软待办事项的首位:/

当前在.Net/C#中的热潮不是“实时开发”,而是“非实时开发”,它得到了模块性和单元测试的大力支持,在这里,您可以将精力放在能够离线测试应用程序的大多数功能上。但这是一种范式转变,对于小型项目或本地桌面开发来说,有时这只是一种过度的杀伤力。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14645791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档