由sosex.mbp或sosex.mbm设置的断点不起作用

我正在使用VS.NET 2010.我编译了一个非常简单的.NET 4.0应用程序。

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestWindbg { class Program { static void Main(string[] args) { Console.ReadLine(); Func1(); } static void Func1() { int i = 0; int j = i + 2; Console.WriteLine(j); } } } 

我打开windbg 6.12.0002.633编译的可执行文件。 键入以下命令以加载sosex

 .loadby sosex clr 

然后,键入以下命令以设置断点

 !mbm TestWindbg.Program.Func1 !mbp Program.cs 16 

然后运行该程序。 没有一个破发点被击中。

任何的想法?

*编辑*

在这里,我根据Marc的要求粘贴了有关我的环境的更多详细信息

 0:004> !mbl 1 eu: disable *!TESTWINDBG.PROGRAM.FUNC1 ILOffset=0: pass=1 oneshot=false thread=ANY 2 eu: disable Program.cs, line 16: pass=1 oneshot=false thread=ANY 0:004> .chain Extension DLL search Path: C:\Program Files\Debugging Tools for Windows (x64)\WINXP;C:\Program Files\Debugging Tools for Windows (x64)\winext;C:\Program Files\Debugging Tools for Windows (x64)\winext\arcade;C:\Program Files\Debugging Tools for Windows (x64)\pri;C:\Program Files\Debugging Tools for Windows (x64);C:\Program Files\Debugging Tools for Windows (x64)\winext\arcade;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files (x86)\Common Files\Roxio Shared\10.0\DLLShared\;C:\Program Files (x86)\Shoreline Communications\ShoreWare Client\;C:\Program Files (x86)\Perforce;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;c:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\ Extension DLL chain: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\sosex: image 4.5.0.0, API 1.0.0, built Mon May 21 11:39:36 2012 [path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\sosex.dll] dbghelp: image 6.11.0001.404, API 6.1.6, built Wed Feb 25 18:10:27 2009 [path: C:\Program Files\Debugging Tools for Windows (x64)\dbghelp.dll] ext: image 6.11.0001.404, API 1.0.0, built Wed Feb 25 18:10:26 2009 [path: C:\Program Files\Debugging Tools for Windows (x64)\winext\ext.dll] exts: image 6.11.0001.404, API 1.0.0, built Wed Feb 25 18:10:17 2009 [path: C:\Program Files\Debugging Tools for Windows (x64)\WINXP\exts.dll] uext: image 6.11.0001.404, API 1.0.0, built Wed Feb 25 18:10:20 2009 [path: C:\Program Files\Debugging Tools for Windows (x64)\winext\uext.dll] ntsdexts: image 6.1.7015.0, API 1.0.0, built Wed Feb 25 18:09:22 2009 [path: C:\Program Files\Debugging Tools for Windows (x64)\WINXP\ntsdexts.dll] 0:004> sx ct - Create thread - ignore et - Exit thread - ignore cpr - Create process - ignore epr - Exit process - break ld - Load module - output ud - Unload module - ignore ser - System error - ignore ibp - Initial breakpoint - break iml - Initial module load - ignore out - Debuggee output - output av - Access violation - break - not handled asrt - Assertion failure - break - not handled aph - Application hang - break - not handled bpe - Break instruction exception - break bpec - Break instruction exception continue - handled eh - C++ EH exception - second-chance break - not handled clr - CLR exception - second-chance break - not handled clrn - CLR notification exception - second-chance break - handled cce - Control-Break exception - break cc - Control-Break exception continue - handled cce - Control-C exception - break cc - Control-C exception continue - handled dm - Data misaligned - break - not handled dbce - Debugger command exception - ignore - handled gp - Guard page violation - break - not handled ii - Illegal instruction - second-chance break - not handled ip - In-page I/O error - break - not handled dz - Integer divide-by-zero - break - not handled iov - Integer overflow - break - not handled ch - Invalid handle - break hc - Invalid handle continue - not handled lsq - Invalid lock sequence - break - not handled isc - Invalid system call - break - not handled 3c - Port disconnected - second-chance break - not handled svh - Service hang - break - not handled sse - Single step exception - break ssec - Single step exception continue - handled sbo - Stack buffer overflow - break - not handled sov - Stack overflow - break - not handled vs - Verifier stop - break - not handled vcpp - Visual C++ exception - ignore - handled wkd - Wake debugger - break - not handled wob - WOW64 breakpoint - break - handled wos - WOW64 single step exception - break - handled * - Other exception - second-chance break - not handled 

*编辑8/17/2012 *

感谢colinsmith,我认为你得到了最接近的答案。 我将我的程序编译为32位程序。 切换到使用32位Windbg和32位sosex。 按照相同的步骤设置断点。 现在,如果我这样做!mbl 。 断点列表的显示方式不同。

 0 e : disable *!TESTWINDBG.PROGRAM.FUNC1 ILOffset=0: pass=1 oneshot=false thread=ANY TestWindbg!TestWindbg.Program.Func1() (PENDING JIT) 

以前,我没有看到线(PENDING JIT) 。 继续该程序,Windbg在断点处成功停止。

我不知道为什么64位程序不起作用。 我仔细检查了我的64位sosex.dll和我的64位程序符号路径。 一切看起来都很正确。 也许,这是sosex.dll中的一个错误?

我使用的是.NET 4.0,我的windbg在Windows 2008 R2 64位中运行。

以下是一些建议,需要检查的事项:

在设置断点之前等待模块加载

在设置断点之前,您可以尝试等待运行/ JITter /模块加载/初始化之后。

使用:

  • sxe ld:mscorlib (加载运行时后中断)…或
  • sxe ld:clrjit (加载sxe ld:clrjit后中断)…或
  • sxe ld:MyModuleAssemblyName (在加载特定模块后中断)

这将导致它们发生后进入调试器….然后你可以做你的!mbm等。

检查您的程序私有符号(来自它的.pdb)是否已正确加载

使用:

  • lml (显示已加载且无法加载符号)
  • lme (显示只能加载符号)。

您也可以使用!sym noisy进行符号加载活动的详细跟踪,例如,当您损坏.pdbs等时,有助于发现它们。

有关PDB相关错误代码的有用参考:

有关validation符号是否正确加载的一般性讨论,请参阅:

使用32位或64位WinDBG

另外你可以尝试在32位调试器而不是64位调试器下运行你的程序(当然使用32位SOSEX插件……并编译为x86)…并查看是否得到相同的结果。

使用最新版本的SOSEX

在Steves Techspot中,他说他破坏了XP中的兼容性(你似乎正在使用它)……也许这就是问题所在。 (2012年6月8日)