- PR -

他アプリから起動したアプリをデバッグする方法

投稿者投稿内容
まぁ
会議室デビュー日: 2008/11/05
投稿数: 19
投稿日時: 2009-01-21 11:57
お世話になります。

現在Windows XPSP2、VS2005 VC++(MFC)でアプリを開発しています。
開発アプリ(A)の起動方法ですが、他アプリ(B)から起動されるものです。
本題ですが(B)から(A)が呼出された時にデバッグを行いたいのですが、
この様なデバッグを経験したことがなく方法が分からない状態です。
(B)についてはデバッグ不可(デバッグ情報なし)です。

何方かご存知の方、ご教授願えないでしょうか。
宜しくお願い致します。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2009-01-21 13:32
デバッグしたいアプリケーション(A)側で、DebugBreakなどのAPIを呼び出すとよいです。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2009-01-21 13:58
引用:

まぁさんの書き込み (2009-01-21 11:57) より:
現在Windows XPSP2、VS2005 VC++(MFC)でアプリを開発しています。


古い記憶で書きますが「実行中のプロセスへのアタッチ」をすればできると思います。
「アタッチ」をキーワードにして検索されると良いでしょう。
ただ、
http://msdn.microsoft.com/ja-jp/library/3s68z0b3(VS.80).aspx
を見ると、エディションによる制約があるかもしれません。

引用:

まぁさんの書き込み (2009-01-21 11:57) より:
(B)についてはデバッグ不可(デバッグ情報なし)です。


(B) にはとくにデバッグ情報はなくても良いと思います。
まぁ
会議室デビュー日: 2008/11/05
投稿数: 19
投稿日時: 2009-01-21 14:05
ご教授有難う御座います。

ソース上には、デバッグ用の記述等は出来ないので他の方法はご存知ないでしょうか?

ご教授宜しくお願い致します。
まぁ
会議室デビュー日: 2008/11/05
投稿数: 19
投稿日時: 2009-01-21 14:35
unibonさん
ご回答有難う御座います。

早速アタッチを試してみました。
デバッガの設定はできたのですが、デバッグ対象のブレークポイントは
無効になってしまい、他アプリから起動してもデバッガでは反応がありませんでした。
アタッチについて調べてみます。

もしまたご教授して頂けたら幸いです。
ぱてお
常連さん
会議室デビュー日: 2008/03/07
投稿数: 41
投稿日時: 2009-01-21 16:17
OutputDebugStringという関数を入れとくと
デバッグモニター系のソフトで動作中のログを見る事が出来ます。
この部分をプリプロセッサで有効/無効が切り替えられるように
実装しておけば、リリース時には無効化してビルドすれば済みますし、
リリース時にも最低限は入れておいていざと言うときはモニタする
という使い方も出来ます。

あと、プロセスにアタッチと言うのは動いている状態で無いと
多分駄目だと思います。
起動後、そのプロセスにアタッチするイメージだと思います。


[ メッセージ編集済み 編集者: ぱてお 編集日時 2009-01-21 16:17 ]
まぁ
会議室デビュー日: 2008/11/05
投稿数: 19
投稿日時: 2009-01-21 16:28
ぱておさん、ご回答有難う御座います。

プロセスにアタッチについて調べていましたが、
起動していないと駄目なのですね。
起動したところからデバッグしたかったのですが。

やはり、ソース上に何かしら実装しないといけないんですね。

動作中のログで確認するのも大事なのですが、ステップ実行を
行わないといけないのでもう少し調べてみます。

ありがたいご意見有難う御座います。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2009-01-21 16:51
引用:

まぁさんの書き込み (2009-01-21 16:28) より:
プロセスにアタッチについて調べていましたが、
起動していないと駄目なのですね。
起動したところからデバッグしたかったのですが。

やはり、ソース上に何かしら実装しないといけないんですね。


(A)はデバッグ情報は付いているけど、いじれないという制約があるということでしょうか?
もしも(A)をいじってよいのなら、(A)の中に、起動した直後に sleep を呼ぶようにでもしておけば、その sleep 中にゆっくりとアタッチできると思います。

(A)をぜんぜんいじれないとすると、どうすればいいんでしょうね。ほかにも方法はいろいろあるとは思うのですが、今のところ思いつかないですね。どういう制約があってどういう制約がないのかを提示されると、良いアイデアが寄せられるかもしれません。

スキルアップ/キャリアアップ(JOB@IT)