**帖子已编辑,下面有更多信息
我刚观看了两个关于高级Dotnet调试的精彩视频(Brian Rasmussen),我正在尝试重复一些步骤,但只是不知道如何处理错误:
An attempt to set a processes DebugPort or ExceptionPort was made,
but a port already exists in the process.
我在谷歌上找到了一些答案,我一般都明白错误说的是什么,但我只是不明白一个奇怪的事实:当我编译我的简单应用程序< .NET 4.0,我可以像电影一样附加,在编译目标后试图做同样的事情.NET 4.0禁止我附加。
google的一个回答是“尝试使用非侵入模式从windbg附加”但是...... Brian不使用任何此类复选框。它只适用于他的视频。
有什么区别?捕获量在哪里?是Windows 7还是Vista?也许一些不同的编译设置很重要?
我正在使用带有MS SDK的MS VS 2k10和从msdn下载的Windbg x86以及正确配置到http服务器的符号。该系统是MS Vista x86。
资源(确切时间> = 8:15): http://channel9.msdn.com/posts/MDCC-TechTalk-Advanced-NET-Debugging-part-2
修改 附加到从VS运行的进程时显示错误。试图附加到VS外部运行的进程,windbg不会显示任何内容。
EDIT2: Windbg在我的系统中有一些令人耳目一新的问题。使用几次“Windows \ [Undock | Dock all]”菜单选项,我能够看到附加过程的内容,这是缺失的。
所以现在唯一的问题是:当附加到从VS开始的进程时有什么不同,当它使用target< 4.0再次= 4.0?为什么当目标4.0 windbg无法以非“非侵入”模式附加到进程时。 VS 2k10有什么变化?
答案 0 :(得分:8)
我认为你从Visual Studio(F5)调试然后尝试附加。您一次只能有一个活动的调试器,这就是您收到此错误的原因。如果要从VS启动进程,请在不进行调试的情况下运行它(Ctrl-F5)。如果你这样做,你应该能够从WinDbg附加。
编辑:很抱歉,我错过了各种版本的.NET在这方面表现不同的观点,所以让我再试一次你的问题。它在视频中“正常工作”的原因是因为我每次从VS启动时都使用run而不进行调试。因此,如果您只想按照视频中的示例进行操作,则无需调试即可运行。
我开始在CLR2和x86上使用WinDbg / SOS。从VS启动x86 .NET进程然后会触发错误,所以我养成了在没有调试的情况下启动的习惯。
但是,正如您所发现的,有些情况下您可以实际附加到VS正在调试的进程。我可以重现您描述的场景,但我也可以附加到从VS2008调试启动的x64,.NET 2进程,但如果平台设置为x86,我无法附加到同一进程。
显然存在一些我没有意识到的细微差别,它似乎与.NET版本无关,因为我可以附加到x64 .NET2进程,即使它处于控制之下VS调试器。
如果我找到其他详细信息,我会更新我的答案。