2010-11-30 12 views
0

ShellExecute() API呼び出しでアプリケーションを起動しようとしています。このアプリケーションには、何らかの処理と終了を行う主な機能のみが含まれています。ShellExecuteで起動したときのアプリケーションのデバッグ

DebugBreak()mainに入れました。 ShellExecute()が呼び出されると、アプリケーションは正常に起動されますが、破損を要求しません。

ShellExecute()を使用して他のアプリケーションから起動した場合、どのようにアプリケーションをデバッグできますか?

私はVC++を使用しています。

答えて

0

これはVC++では実行できません。 WinDbgでは、すべての子プロセスをデバッグするのにこれはちょうど.childdbg 1です。 VC++を使用すると、ピンチで画像ファイルの実行オプションを使用することができます。詳細はhttp://codereflect.com/2009/09/20/how-to-debug-child-process-using-windbgvisual-studio/をご覧ください。本当に、WinDbgを学ぶ時間があれば、これではるかに優れています。

1

DebugBreak()があなたにとって問題がない場合は、_CrtDbgBreak()を試してみてください。 _CrtDbgBreakはデバッグビルドでのみ動作することに注意してください。

_CrtDebugBreakは起動時にプロセスブレイクを開始するのに間違いなく有効ですが、DebugBreakもそうです。

両方の関数は例外を発生させるため、プロセスがクラッシュしたように見えることに注意してください。これは正常で、クラッシュダイアログからデバッガをアタッチすることができます。 (クラッシュダイアログでもプロセスを終了させることができますが、それを使わないでください。)

また、メインの周りにcatch-all SEH例外ハンドラがある場合、DebugBreak &によって例外が発生しますあなたはクラッシュダイアログを表示せずに、またはあなたがそれにアタッチできるようにするだけで、アプリケーションは終了します。

0

これを試すことができますが、それはxpシステムでは問題ありません。

app.exeのアプリケーション名で、

-s1 ...- S3コマンドライン引数です。 012.exeは、hRet = ShellExecute(NULL、L "open"、L "vsjitdebugger.exe"、L "app.exe -s1 a1 -s2 a2 a3 -s3"、szExePath、SW_SHOW)を返します。

関連する問題