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

Har*_*wok 11 .net c# debugging windbg sosex

我正在使用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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

.loadby sosex clr
Run Code Online (Sandbox Code Playgroud)

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

!mbm TestWindbg.Program.Func1
!mbp Program.cs 16
Run Code Online (Sandbox Code Playgroud)

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

任何的想法?

*编辑*

在这里,我根据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
Run Code Online (Sandbox Code Playgroud)

*编辑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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Col*_*ith 6

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

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

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

使用:

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

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

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

使用:

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

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

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

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

使用32位或64位WinDBG

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

使用最新版本的SOSEX

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