Visual Studio调试器的奇怪行为; "无法访问网络位置"(ERROR_NETWORK_UNREACHABLE)

Meh*_*dad 20 c++ debugging visual-studio visual-c++ visual-studio-2013

我从2012年(2012年,2013年,2015年预览版)开始,在多台计算机和多个项目上,每个版本的Visual Studio都经历过这个,但我还没弄清楚如何解决它:

每当我调试64位(?) C++控制台程序时,几分钟后看似完全随机(当我没有点击或键入任何内容时),程序的控制台窗口会自动关闭,我无法再调试或者使用Visual Studio逐步执行该程序.当我按下Stop并尝试重新启动调试时,我通常会得到ERROR_NETWORK_UNREACHABLE:

// MessageId: ERROR_NETWORK_UNREACHABLE
// MessageText:
// The network location cannot be reached. For information about network troubleshooting, see Windows Help.
#define ERROR_NETWORK_UNREACHABLE        1231L
Run Code Online (Sandbox Code Playgroud)

如果我尝试手动附加到该过程,我会收到错误:

Unable to attach to the process.
Run Code Online (Sandbox Code Playgroud)

我发现的唯一解决方法是重新启动Visual Studio.我找不到任何其他方法来解决它,我已经尝试运行Process Monitor但没有找到任何东西.

是什么导致了这个问题,我该如何解决?


(?)进一步检查似乎只发生在64位模式,但我不是100%肯定.

atl*_*ste 10

好的,这是错的

我也有这个bug的问题,在我的情况下,它发生在每个其他调试会话.这意味着调试 - >停止 - >调试 - > 错误 - >重启视觉工作室 - >开始(全天重复每一分钟).

不用说我被迫寻找解决方案.所以昨天我尝试了procmon,花了好几个小时看着API监视器的差异,看了插件,netstat等等等等.没有发现任何东西.我放弃.

今天

直到今天.

为了在今天的程序中追踪一个愚蠢的错误,我启动了appverifier.对于我的应用程序,我运行了"基础"测试并单击了保存.几个小时后,这导致我的程序中的错误,这是这样的(非常简化的版本):

void* dst = _aligned_malloc(4096, 32);
memcpy(dst, src, 8192);
Run Code Online (Sandbox Code Playgroud)

显然这是一个错误,显然它需要修复.memcpy在线上放置一个断点后,我注意到了这个错误,但没有执行.

在停止并再次'调试'后,我惊讶地发现我实际上可以第二次调试该程序.而现在,几个小时后,这个烦人的错误还没有重新出现.

所以似乎正在发生的事情

所以......显然我程序中的数据正在渗透到调试器的数据或执行空间中,这反过来又会产生错误.

我看到你在想:不,这不应该发生......你是对的; 但显然确实如此.

那么如何解决呢?基本上修复程序(更具体地说:堆损坏问题)似乎会使VS调试器错误消失.使用appverifier.exe(它在Windows的调试工具中)将为您提供一个良好的开端.

为什么会这样

从VS2012开始,VC++使用不同的方式来管理堆.Hans Passant在此解释:自从(vs2012/2010/2013)以来,msvcrt是否使用不同的堆进行分配.

基本上发生的是堆损坏将破坏您的调试器.AppVerifier基本设置将确保在应用程序执行某些操作来破坏堆之前触发断点.

所以,现在发生的事情是,在进程打破堆之前,会触发断点,这通常意味着您将终止进程.最终结果是在终止程序之前堆仍将处于完好状态,这意味着您的调试器仍将起作用.

"测试"

  • 在使用appverifier之前 - 每2分钟触发一次bug
  • 使用appverifier时 - VS调试器已稳定5天(和计数)


小智 0

我也有同样的问题。认为它与 64 位控制台应用程序有关,几乎任何调试会话都可以轻松触发它。但是,它也会发生在 64 位 Windows 应用程序上。现在我在 32 位 Windows 应用程序上看到它。我在单个桌面上运行 Windows 8.1 pro,并使用最新版本的 vs 2013,并且没有远程调试。我的(添加的)扩展包括 Visual Assist、Advanced Installer、ClangFormat、Code Alignment、Code Compare、Duplicate Selection、Productivity Power Tools 2013 和 Visual SVN。

我发现“Visual Studio 2013\Settings\CurrentSettings.vssettings”文件已损坏。您可以删除此文件并通过重新启动 VS 重新创建它,或者您可以尝试编辑 XML。然后,我保留一份好的设置文件的副本,当它再次损坏时我用它来替换。

就我而言,损坏的行以

</ToolsOptionsSubCategory><ToolsOptionsSubCategory name="XAML" RegisteredName="XAML"
Run Code Online (Sandbox Code Playgroud)

...而且它非常长(我认为这就是它容易腐败的原因)。