6

** 帖子已编辑,更多信息如下

我刚刚观看了两个关于高级 Dotnet 调试的精彩视频(由 Brian Rasmussen 撰写),我正在尝试重复一些步骤,但只是不知道如何处理 tis 错误:

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 后相同,我无法附加。

谷歌的答案之一是“尝试使用非侵入模式从 windbg 附加”但是..布赖恩不使用任何此类复选框。它只适用于他的视频。

有什么不同?问题在哪里?是Windows 7还是Vista?也许一些不同的编译设置很重要?

我正在使用 MS VS 2k10 和 MS SDK 以及从 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 发生了什么变化?

4

1 回答 1

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 版本相关,因为即使它在 VS 的控制下,我也可以附加到 x64 .NET2 进程调试器。

如果我找到更多详细信息,我会更新我的答案。

于 2011-03-28T13:39:53.463 回答