2009-09-02 16 views
13

.NETアプリケーションの現在のディレクトリ をVisual Studioデバッガで実行するにはどうすればよいですか?Visual Studioのデバッグセッション中に現在のディレクトリを検索していますか?

更新1。明らかにするには:私はコード を変更したり、プログラム自体の情報を取得したくない - 私はちょうど のアプリケーションについての情報を取得したい デバッグされています。

.NET Windows Formsアプリケーション(混合VB.NETと C#)をデバッグしている間、私は、XMLファイルから 読み出された場所から確認されませんでした。私は現在のディレクトリが アプリケーションのディレクトリであると予想していました。しかし、中に処理結果のためのプロセスエクスプローラ、 プロパティを使用して:

D:\プログラムファイル(x86の)\のMicrosoft Visual Studioの9.0 \ Common7 \

は(右/プロセス/プロパティ]をクリックしますタブImage /カレントディレクトリ)。プロセスエクスプローラ のメインビュー内のプロセスの上にカーソルを置く

異なる結果を明らかにした(スクリーンショットは以下を参照):

D:\ dproj \ DTASCall \ DTASuperCharge \ビン

\

何が正しいですか?

アプリケーションスタンドアロンは、予想 カレントディレクトリを表示

D料金:プロセスExplorerプロセスのプロパティウィンドウに

\ \ dproj \ DTASCall \ DTASuperCharge \ビン。


プロセスエクスプローラの注釈付きのスクリーンショット:あなたのコード内で

Alt text http://www.pil.sdu.dk/1/until2039-12-31/PEdiscrepancy_2009-09-02.png

答えて

4

、あなたがのデバッグプロパティを変更した場合を除き、デフォルトでは

System.IO.Directory.GetCurrentDirectory() 

関数を呼び出します現在のディレクトリは、プロジェクトのbin \ Debugディレクトリ(.exeが実行される場所)として開始されます。

+0

実際のプログラムが実行されていないとはどういう意味ですか?スクリーンショットをとったときにブレークポイントでプログラムが停止しました。 –

+0

ええと、あなたが何を意味するか分かります。私は.vshostについて間違っていた - 私はちょうど同じことをチェックしてprocexpは問題なく私の現在の作業ディレクトリを追跡する。 System.IO.Directory.GetCurrentDirectory()の出力をデフォルトのプロジェクト設定と比較してみてください。これはアプリケーションのbin \ Debugディレクトリにする必要があります。 読み込みしようとしているXMLファイルがプロジェクトアイテムの場合は、ビルドアクションプロパティを「コンテンツ」に設定し、出力ディレクトリにコピープロパティを適切に設定してください。現在のディレクトリではなく、アプリケーションのルートディレクトリから読む価値があるかもしれません。 – Richard

+0

[デバッグ]ページの[作業ディレクトリ]フィールドが空です。しかし、Compileページでは、 "Build output path"フィールドに "bin \"が含まれています。それは空であるべきですか?このプロジェクトは2003年にVisual Studioによって作成され、それ以来2回のVisual Studioの更新が行われています。現在のところ、アプリケーションはbinディレクトリではなくbinディレクトリから起動します。 –

22

Visual Studioでは、デバッグタブのプロジェクト設定で、必要に応じて「作業ディレクトリ」を設定できます。コードまたはブレークポイントで即時ウィンドウ内の現在の作業ディレクトリを決定するために

System.IO.Directory.GetCurrentDirectory() 
+1

イミディエイトウィンドウの場合: "Debug.Print(System.IO.Directory.GetCurrentDirectory())"ではありませんか? –

+2

イミディエイトウィンドウの代わりに:デバッグ/クイックウォッチ/ <式フィールドに入力> /再評価を押します。または、通常のウォッチウィンドウの[名前]列の最後の行にReturnキーを入力します。 –

+4

または直接ウィンドウでは、いつでも "?System.IO.Directory.GetCurrentDirectory()"を実行することができます –

-3

を試す最良の方法は、プロセスにアタッチした後、WinDbg内のアプリケーション(Windowsのデバッガを)実行することです!handleコマンドを実行します。開いている各ファイルには、関連するハンドルがあります。対応するプロセスのすべてのハンドルをダンプすると、対応するファイルパスが表示されます。ここで

は一例です:

!handle 0 f process-id 

は、あなたのプロセスIDの値を持つプロセスIDを交換してください。プロセスIDの代わりに、プロセスアドレスを使用することもできます。これがファイルオブジェクトを表示しない場合、ファイルハンドルは既に閉じられています。この場合、ハンドルをトレースする必要があります。これは!htraceコマンドで行うことができます。

+0

以下のフィリップ・リークの投稿が正しい答えです: "System.IO.Directory.GetCurrentDirectory()" –

関連する問題