2

私は大学や現在の仕事で多くの仕事にgdbを使用しましたが、Windowsでの開発にCDBとWinDBGを使用する方法を学ぶ必要があります。Emacsには素晴らしいモードがあるので、CDBを使用したいと思います。

  1. CDBを開始した後、現在のディレクトリを変更するにはどうすればよいですか?これは、現在のディレクトリがデフォルトで実行可能ディレクトリになっているので便利です(cdb C:/dev/myexe.execdbをから起動しましたが、現在のdir = c:/ devになりますC:/testdir)が、別のドライブにテストディレクトリがあります。作業ディレクトリ。または、複数のテストディレクトリがあり、プロセスのブレークポイントを失うことなく、それらを簡単に切り替えたい場合があります。作業ディレクトリの変更は、GDBでを使用して行うことができますcd。これはCDBでどのように行うことができますか?

  2. cdb my.exe arg1 arg2ブレークポイントの設定とコードステッピングを数分間使用して新しいプロセスのデバッグを開始したとすると、追加の引数を指定する必要があることに気付きます。GDBでは、プロセスを実行するたびにコマンドライン引数を設定できます(r arg1 arg2 newarg3 ...)。私のブレークポイントとワークスペース内のすべては同じままです。CDBでこれを行うことは可能ですか?ワークスペースを保存し、デバッグプロセスの新しい引数を使用してCDBを再起動してから、ワークスペースをロードしてブレークポイントを取得する必要があるようです。これは、実行コマンドを発行するよりもはるかに手間がかかります。

過去数週間の検索でこれらの答えが見つかりませんでした。VisualStudioのデバッグから離れたいと思っています。

編集:明確化された#1と#2

4

1 に答える 1

6

そうですね、GDBほど簡単ではありませんが、CDBでは可能です。

作業ディレクトリを変更してブレークポイントを維持するには、プロセスを.killし、 .creatdirを使用して起動する場所を指定し、 .createを使用してプロセスを再起動する必要があります。

例えば:

 0:000> bp CreateFileW 
 0:000> bl  0 e 750316af     
 0001 (0001)  0:**** kernel32!CreateFileW 
 0:000> .kill 
 Terminated.  Exit thread and process events will occur.     
 0:000> .createdir d:\dev 
 Process creation dir: d:\dev 
 Process will inherit handles   
 0:000> .create c:\windows\system32\notepad.exe 
 CommandLine: c:\windows\system32\notepad.exe 
 Starting directory: d:\dev 
 Create will proceed with next execution 
 0:000> g 
 Symbol search path is: SRV*d:\symbols*http://msdl.microsoft.com/download/symbols 
 Executable search path is:  ModLoad: 00880000 008b0000   notepad.exe eax=00000000   
 ebx=00000000 ecx=25c50000 edx=0009dc08 esi=fffffffe edi=00000000 eip=774d0fac 
 esp=000df398 ebp=000df3c4 iopl=0         nv up ei pl zr na pe nc cs=0023  ss=002b  
 ds=002b  es=002b  fs=0053  gs=002b          efl=00000244 
 ntdll!LdrpDoDebuggerBreak+0x2d: 774d0fac 8975fc          mov     dword ptr [ebp-4],esi ss:002b:000df3c0=00000000 
 0:000> bl  0 e 750316af     
 0001 (0001)  0:**** kernel32!CreateFileW 
 0:000> g

異なる引数で再起動するには、同じ.killを実行してから、新しい引数を.createコマンドに渡します。

これを頻繁に行う場合は、このマルチステッププロセスを簡単にするスクリプトの作成に時間を費やします。

于 2012-05-02T13:04:19.030 に答える