12

私は 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

* 2012 年 8 月 17 日編集 *

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 ビットで実行されています。

4

2 に答える 2

6

ここにいくつかの提案、確認事項があります:

ブレークポイントを設定する前にモジュールがロードされるのを待つ

ブレークポイントを設定する前に、ランタイム/JITter/モジュールがロード/初期化されるまで待ってみてください。

使用する:

  • sxe ld:mscorlib       (ランタイムのロード後に中断)... または
  • sxe ld:clrjit           (JITter のロード後に中断) ... または
  • sxe ld:MyModuleAssemblyName       (特定のモジュールがロードされた後にブレーク)

これにより、それらが発生した後にデバッガーが中断されます....その後!mbm、などを行うことができます.

プログラムのプライベート シンボル (.pdb から) が正しく読み込まれているかどうかを確認します。

使用する:

  • lml    (読み込まれたシンボルと読み込みに失敗したシンボルを表示)
  • lme    (読み込みに失敗したシンボルのみを表示)。

代わりに、シンボル読み込みアクティビティの詳細なトレースに使用することもでき!sym noisyます。たとえば、.pdbs が破損したときの発見に役立ちます。

PDB 関連のエラー コードの有用なリファレンスについては、次を参照してください。

シンボルが正しくロードされていることの確認に関する一般的な議論については、以下を参照してください。

32 ビットまたは 64 ビットの WinDBG を使用する

さらに、64 ビット デバッガーではなく 32 ビット デバッガーでプログラムを実行してみてください (もちろん 32 ビット SOSEX プラグインを使用し、x86 としてコンパイルします)...同じ結果が得られるかどうかを確認してください。

最新バージョンの SOSEX を使用する

Steves Techspot で、彼は XP の互換性を壊したと言っています (あなたが使っているようです)...それが問題なのかもしれません。(2012 年 6 月 8 日付け)

于 2012-08-18T12:01:23.227 に答える