【问题标题】:Is there a way to stay on current document after a "break all" in Visual Studio?在 Visual Studio 中“全部中断”后,有没有办法留在当前文档上?
【发布时间】:2017-07-25 20:16:56
【问题描述】:

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

【问题讨论】:

  • 我为“无符号”窗口使用的一种解决方法,虽然不是我需要的,但是将该窗口与所有其他检查窗口放在底部
  • 哦,自从 vs2002 以来,这一直困扰着我。唉,我不知道解决方法。也许等待 vs2039
  • 哈哈@wal!我不敢相信它还没有修复,也许只是我(和你)对此感到恼火......
  • 点击“向后导航”按钮(Ctrl+-)不是一个简单的解决方法吗?

标签: c# visual-studio


【解决方案1】:

有一种方法可以保留在当前文档上,但这需要在 Debug 工具栏中创建一个 Visual Studio 加载项和一个新的 UI 命令。这个答案的功劳实际上也应该归功于 openshac,他发布了类似的 SO question 并且还在他的 OP 中使用宏给出了解决方法。

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

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;
        }
    }
}

创建并注册插件后,只需:

  1. 单击 Visual Studio 菜单上的 工具
  2. 自定义
  3. 命令
  4. 选择“工具栏”单选按钮
  5. 选择“调试”
  6. 添加命令...
  7. 从“插件”类别中,选择您的自定义插件。

就是这样。

【讨论】:

  • 这行得通:谢谢你一千次。明天将给予赏金,不能在 20 小时之前这样做。
  • 这是正确的答案,但如果您想跳过插件创建和注册步骤,请参阅 Jarek 关于它是最新版本的 VSCommands 扩展的一部分的回答。
  • VSCommand 看起来很棒,我使用@AlexFilipovici 解决方案来获得赏金和接受的答案,因为它完全符合我的问题和需求,完全控制在我的 IDE 中。总之,感谢大家的支持。
【解决方案2】:

http://visualstudiogallery.msdn.microsoft.com/a83505c6-77b3-44a6-b53b-73d77cba84c8 提供的最新版本的 VSCommands 扩展(免费版)正是您想要的。 它在 Debug Toolbar 和 Debug Menu 中添加了 Break In Current Document 按钮:

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

【讨论】:

  • 想补充一点,这个扩展不幸在 VS2015 中被废弃了。
  • Visual Studio Toolkit,也可从 VS 的 Extensions 菜单中获得,具有此功能。安装后,我只是更改(选项 > 键盘)Debug.BreakAll 和 Debug.BreakAllInCurrentDocument 的键绑定,将通常的 CTRL+ALT+BREAK 组合绑定到新命令 marketplace.visualstudio.com/…
【解决方案3】:

这是一项功能.. 当您“全部中断”时,假定您的进程已挂起。您可能对这种情况感兴趣的第一件事是 - WHERE。因此,它会将您直接引导到正在执行的“当前”位置。 IIRC,这是所有低级调试器的事实标准。如果您不希望“未加载符号”,只需标记“显示反汇编”,它将永远不会再次弹出:)(当然,相反,您会看到确切的停止点。是的,这也是一个我自己用过很多次调试未知库代码的功能)

另一方面,如果您知道希望代码在哪里停止,请将断点放在那里。

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

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

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


编辑

啊……你是对的。我完全忘记了光荣的编辑和继续。我不是在开玩笑/取笑,E&C 是一个很棒的功能,我希望所有其他平台都拥有。我已经忘记了,因为...我广泛使用 lambdas、泛型、foreachs 和其他有效阻止编辑和继续的功能。

无论如何,重点是,因为编辑并继续是您想使用的黄金功能 - 应用程序必须处于“中断”模式。但是,无论如何如何“中断”/“暂停”等,IDE 会假定 PAUSE 是您的目标,而不是编辑,因此它会显示您在哪里暂停了应用程序。

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

这是为什么你不能在 E&C 会话期间添加方法、类、修改泛型等的主要问题之一:即。编辑您当前的 lambda 或当前 foreach 可能没问题,但 IDE 将无法重新定位流程并正确执行新代码。这有点类似于您有时会看到“陈旧代码”警告的原因,但是对于这些代码结构,分析起来更加困难,因此无法实现。并且可能永远不会在 MS 的 TO-DO 列表中名列前茅:/

.Net/C# 的当前繁荣不是“实时开发”而是“notaliveyet 开发”,它受到模块化和单元测试的大力支持,您可以在其中努力离线测试应用程序的大部分功能.. 但这是一种范式转变,对于小型项目或本地桌面开发,有时这简直是矫枉过正。

【讨论】:

  • 您可能说得对,因为我使用 IDE 的方式更多。这是一个典型的场景:程序启动,显示主winform;我打开一个对话框。此表单运行放置在外部库中的代码。我仍在使用该程序,查看最终用户所看到的内容,然后我注意到一些需要修复的东西。回到 IDE,我打破了所有使用编辑和继续,光标在当前表单上 .ShowDialog() 调用。分离意味着失去编辑并继续,而当您知道在哪里停止时,断点就可以了。我只知道我目前关注的是哪个文件。
  • 文本变长了,所以我将它作为编辑包含在内。不幸的是,除了同意你之外,我无能为力:)
  • 感谢您的详细解释。我来自经典的 ASP、VB6,然后是 VB.NET,现在是 C#:如果没有编辑并继续,我根本无法编程,它对我来说是如此自然和有用(不一定是正确的)。有时我发现自己没有写一个 Linq 语句只是因为我失去了 E&C。最近开始在写情感代码之前写单元测试,只是继承主类抽象方法:在这种情况下,E&C是一个杀手级特性。
猜你喜欢
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 2011-02-09
  • 2010-09-07
  • 2017-11-25
相关资源
最近更新 更多