ソリューション内の実行ファイルから起動した実行ファイルのデバッグ – プログラミング – Home

ソリューション内の実行ファイルから起動...
 
通知
すべてクリア

[解決済] ソリューション内の実行ファイルから起動した実行ファイルのデバッグ


亀山
 亀山
(@亀山)
ゲスト
結合: 18年前
投稿: 133
Topic starter  

連投失礼します。

さまざまなコマンドラインオプションを持つ実行ファイル(A.exe)を作成していて、
そこで指定された動作をデバッグでテストしたいと思っています。
テスト中は、様々なコマンドラインを行ったり来たりすることになります。

A.exeのプロジェクト設定でコマンドラインを変更すれば可能なことはわかりますが、
テストする動作を変更するたびにプロジェクト設定を書き換えないといけません。

そのため、多くのコマンドラインをあらかじめコンボボックスなどに入れておき、
簡単に切り替えてA.exeをCreateProcess()などで起動する実行ファイル(B.exe)を
ソリューション内に作成し、こちらのほうをデバッグ開始で実行しようとしました。

ところがこの方法だと、今度はデバッグ動作中のB.exeからA.exeを起動するたびに、
プロセスにアタッチし直さなければいけなくなります。

B.exeのデバッグ中に起動された同一ソリューション内のA.exeを
自動で現在のソリューションにアタッチしてくれる設定方法はあるのでしょうか?

もしくは、もっと簡単に多くのコマンドラインオプションを変更しながら
デバッグできる方法はありますでしょうか?


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 4年前
投稿: 1480
 

こんなアドインを使用してみるのはいかがでしょうか。若干楽になります。

子プロセスを自動的にデバッグ対象にしてくれる:
https://visualstudiogallery.msdn.microsoft.com/a1141bff-463f-465f-9b6d-d29b7b503
d7a

デバッグ用コマンドライン切り替え:
https://visualstudiogallery.msdn.microsoft.com/b54410f3-90aa-4071-abb3-215efea48
074


返信引用
亀山
 亀山
(@亀山)
ゲスト
結合: 18年前
投稿: 133
Topic starter  

aetosさん、情報ありがとうございます。
マイクロソフトの社員(?)がこのような方法を公開するということは、
正式に子プロセスをデバッグできる方法というのは存在しないのでしょうかね。

現在の開発環境が2008や2010なので、
そのまま利用することはできないかもしれませんが、
こういう手法もあることがわかったので、
そちらのほうもいろいろ試してみたいと思います。


返信引用
aetos
(@aetos)
Noble Member
結合: 4年前
投稿: 1480
 

# 何の解決策でもありません、と最初にお断りして、仕組みの話などを少々…

CreateProcess を呼び出すときに DEBUG_PROCESS フラグを指定し、かつ DEBUG_ONLY_THI
S_PROCESS フラグを指定しなければ、CreateProcess で起動したプロセスがさらに別の子
プロセスを立ち上げた場合、子プロセスも自動的にデバッグ対象になります。

というのは、デバッガーを作る場合の話。

1)DEBUG_PROCESS を指定して CreateProcess するアプリ=デバッガー=VS
   ↓
2)デバッグされるアプリが CreateProcess で子プロセスを起動
 この時には(このアプリはデバッガーではないので)DEBUG_PROCESS は指定しない
   ↓
3) (1) のデバッガーが DEBUG_ONLY_THIS_PROCESS を指定していなければ、
 ここで起動された子プロセスも自動的に (1) のデバッガーのデバッグ対象になる

今作ろうとしているアプリは (2) と (3) にあたります。

つまり、VS はデバッグ対象のアプリを起動する時に、DEBUG_ONLY_THIS_PROCESS を付け
てるんでしょうね、たぶん。ということになりますね。
VS 2013 のオプションを見た限りでは、子プロセスも自動的にデバッグ対象とするような
設定は見当たりませんでした。
2008 や 2010 は手元に環境がないため、ちょっとわかりません。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 4年前
投稿: 828
 

難しそうですね。
C/C++ネイティブコードなら、
対象exeのデバッグを開始したい位置に

__asm int 3

としておく方法も、覚えておくと役にたつかもしれません。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

x86 では __asm が有効なんだけど
x64 では __asm はできなくなっちったから __debugbreak() を推奨する。

DebugBreak(); だと API Call
__debugbreak(); だと Visual C++ 組み込みインライン展開関数になる。
x86/x64 native では INT 3
C++/CLI なら BREAK (MSIL)
になってちょっとだけ楽できる様子。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 4年前
投稿: 828
 

おおっ、tetrapodさんフォローありがとうございます。


返信引用
亀山
 亀山
(@亀山)
ゲスト
結合: 18年前
投稿: 133
Topic starter  

aetosさん、仲澤@失業者さん、tetrapodさん、情報ありがとうございます。

Visual Studioに「子プロセスもデバッグ対象にする」のような設定があって、
そのときにVisual StudioがDEBUG_ONLY_THIS_PROCESSを付けないでくれさえすれば、
このようなデバッグ方法が可能だったのにということですね。

もしくは、「デバッグ開始時にコマンドラインを選択する」が欲しかったところです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました