2017-09-17 11 views
4

挿入することはできません:私はコンパイルし、このアプリを実行し、それに接続デバッグ.NETアプリケーション、私はちょうどこのような空のフォームのconsits単純なC#アプリケーション、デバッグするために、windbgをを使用して、ブレークポイント

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApp2 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 
    } 
} 

をwindbgのと、その後のWinDbgで実行します。

0:009> .cordll -ve -u -l 
Automatically loaded SOS Extension 
CLRDLL: Loaded DLL C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscordacwks.dll 
CLR DLL status: Loaded DLL C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscordacwks.dll 

そしてテイン私はSOS拡張をロードし、そのロードされていることを確認します。

0:009> .loadby sos mscorwks 
0:009> .chain 
Extension DLL search Path: 
    C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\WINXP;C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\winext;C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\winext\arcade;C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\pri;C:\Program Files (x86)\Windows Kits\10\Debuggers\x64;C:\Users\username\AppData\Local\Dbg\EngineExtensions;C:\Program Files (x86)\Windows Kits\10\Debuggers\x64;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\PuTTY\;C:\Program Files (x86)\Bitvise SSH Client;C:\Program Files\nodejs\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\Git\cmd;C:\Users\username\AppData\Local\Android\sdk\platform-tools;C:\Program Files (x86)\Nox\bin\;C:\Users\username\AppData\Local\Microsoft\WindowsApps;C:\Users\username\AppData\Roaming\npm;C:\Program Files (x86)\Nmap;C:\Program Files (x86)\mitmproxy\bin 
Extension DLL chain: 
    C:\Windows\Microsoft.NET\Framework64\v2.0.50727\sos: image 2.0.50727.8794, API 1.0.0, built Tue Jun 20 23:15:41 2017 
     [path: C:\Windows\Microsoft.NET\Framework64\v2.0.50727\SOS.dll] 
    C:\Windows\Microsoft.NET\Framework64\v2.0.50727\SOS.dll: image 2.0.50727.8794, API 1.0.0, built Tue Jun 20 23:15:41 2017 
     [path: C:\Windows\Microsoft.NET\Framework64\v2.0.50727\SOS.dll] 
    dbghelp: image 10.0.15063.468, API 10.0.6, built Thu Jan 1 03:00:00 1970 
     [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\dbghelp.dll] 
    ext: image 10.0.15063.468, API 1.0.0, built Thu Jan 1 03:00:00 1970 
     [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\winext\ext.dll] 
    exts: image 10.0.15063.468, API 1.0.0, built Thu Jan 1 03:00:00 1970 
     [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\WINXP\exts.dll] 
    uext: image 10.0.15063.468, API 1.0.0, built Thu Jan 1 03:00:00 1970 
     [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\winext\uext.dll] 
    ntsdexts: image 10.0.15063.468, API 1.0.0, built Thu Jan 1 03:00:00 1970 
     [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\WINXP\ntsdexts.dll] 

次に、.pdbがあるフォルダとソースフォルダにデバッグシンボルのパスを設定します。

しかし、私は、ソースファイルを開き、ソース行にブレークポイントを設定し、私はwindbgの中でエラーを取得するプロセスを続行する場合:

0:009> g 
Unable to insert breakpoint 3 at 00000000`008f001a, Win32 error 0n998 
    "Invalid access to memory." 
bp3 at 00000000`008f001a failed 
WaitForEvent failed 

を、私はそれが壊れて、私に.netアセンブラを示すだろうと予想しかし、それはいつも失敗します。あなたはどのようにwindbgを使用して.netアプリケーションをブレークポイントしますか?

+1

良い質問ですが、最も重要な部分がありません:どのようにブレークポイントを設定しましたか? –

+0

@ThomasWeller私はwindbgメニューを開きました 'File'を選択しました' Open Source File'が 'Form1.cs'を開いたところで、ソースファイルに' InitializeComponent(); '行にカーソルを置きF9を押しました。行が赤くなるので、ブレークポイントが配置されているようです。 – YakibutaRamen

答えて

5

F9をソースファイルに使用して、.NETでブレークポイントを設定することはできません。代わりに、SOS !bpmdまたはSOSEX!mbpコマンドが必要です。

SOSの構文は

!BPMD <module name> <method name> 
!BPMD -md <MethodDesc> 

であり、行番号を使用することはできません。

SOSEX構文は

!sosex.mbp <source file> <line number> [<column number>] [Options] 

であるとのPDBが利用可能な場合に行番号を使用することができます。

!mbcは、管理対象ブレークポイントをクリアします。 !mbdはマネージドブレークポイントを無効にし、!mblはマネージドブレークポイントをリストします。 !bpmdは、メソッドがすでにJITコンパイルされていて、実行可能なマシンコードにブレークポイントを設定できる場合にのみ機能します。!bpmd!mbpは、メソッドがJITコンパイルされていなくてもブレークポイントを設定できます。メソッドがコンパイルされるとすぐにブレークポイント自体が設定されます。

+0

'!bpmd'はまだJITコンパイルされていないメソッドの未解決のブレークポイントを設定できます。 '!bpmd module MyClass.MyFunc'または'!bpmd -md 'と入力します。 –

関連する問題