2012-04-29 7 views
2

私は大学での私の現在の仕事でgdbを使用しましたが、Windowsでの開発にCDBとWinDBGを使用する方法を学ぶ必要があります。私はCDBを使うのが好きです。なぜなら、Emacsには素晴らしいモードがあるからです。CDBデバッグプロセスへの現在のディレクトリとコマンドライン引数の変更

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

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

私は過去数週間のオンとオフを検索した後、これらのための答えを見つけていない、と私は本当に離れてVisual Studioのデバッグから取得したいのですが。

編集:明確化#1、#2

+0

万が一このhttp://www.emacswiki.org/emacs/cdb-gud.elを使用していますか?作業ディレクトリは、コメントに基づいてcdbが存在しない場所に接続する実行可能ファイルでなければなりません。その後、シンボル、ソースファイルがどこに置かれているかを常に伝える必要があるので、実際に問題があるとは思われません。あなたは何を求めていますか?ワークスペースをcdbに保存した場合は、すべてのブレークポイントを保存する必要がありますが、これはWinDbgでは確かです。私はWinDbgを独占的に使用しているので、最後の点を推測しています – EdChum

+0

私は#1を明確にしました。 #2の場合は、cdb myexe.exe arg1 arg2としましょう。デバッグとブレークポイントの設定後、バグを再現するために追加の引数を指定する必要があることがわかりました。私がGDBでこれをやっていたら、r arg1 arg2 newarg3を発行すれば十分です。 CDBでは、新しいコマンドライン引数でデバッグプログラムを再起動するにはどうすればよいですか? – Kizaru

+1

1.についてはわかりませんが、2.では、引数http://msdn.microsoftをとるスクリプトファイルを作成することができます。com/en-us/library/windows/hardware/ff566261%28v = vs.85%29.aspxこれは、可変引数を使用してスクリプトを実行します – EdChum

答えて

5

まあ、それは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コマンドに新しい引数を渡します。

これをたくさんするつもりなら、この多段階プロセスを簡単にするスクリプトを作成するのに時間を費やすことになります。

関連する問題