- - PR -
サービスアプリケーションのデバッグ
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-07-25 09:51
質問のところで挙げたURLにダミーサービスのことが載っていたので追加してみました。 sleepということですが、サービス開始までに一定時間を経過するとサービスは開始できないのではないでしょうか?(勘違いならご容赦ください) | ||||
|
投稿日時: 2007-07-25 09:57
そのとおりです。デフォルトでは30秒ですが、レジストリの変更で任意の時間に設定できるので、10分くらいに増やしてしまえば問題ありません。下記の例では24時間に増やしていますね。 http://support.microsoft.com/kb/824344/ja | ||||
|
投稿日時: 2007-07-25 10:05
3です。サービスでないwindowsアプリケーションのようにブレークポイントまでの 実行順やそのときの変数の値を調べたいのですが、今現在できていません。 | ||||
|
投稿日時: 2007-07-25 10:27
Cのサービスはとりあえずソリューションからはずしました。 プロセスが起動するまで待って・・ということですが、Bのプロセスが起動しないと IDE(VisualStudio2005)からアタッチできないと思いますが私の思い違いでしょうか。 Bにアタッチした状態で、Aをデバッグ(ブレークポイントをつけるなど、実行時の変数 の値を調べる)することが今現在できていません。 | ||||
|
投稿日時: 2007-07-25 11:21
サービスに限らず、起動シーケンスを制御できない場面でのデバッグでは 常套的に使えます。 ちなみに、一度のアタッチでデバッグできるのはひとつのプロセスのみです。 ですので、AとBが別のプロセスで動いているのであれば、それぞれに アタッチする必要があります。 なので、BにアタッチしていればAもデバッグできるということはありません。 #ただし、AがDLLの場合は別 _________________ // とっちゃん(高萩 俊行)@わんくま同盟 // とっちゃん’Blog // MS-MVP for Developer Tools - Visual C++ // WindowsInstallerの話題はhttp://www.freeml.com/msiまで | ||||
|
投稿日時: 2007-07-25 12:50
思い違いじゃないですよ。 AもBもデバッグしたいという事なんですよね? Aは普通のアプリケーションでBはWindowsサービス。 Bはサービスとして登録して開始しておく。デバッガをBにアタッチ。OnStart メソッドをデバッグしたいなら、デバッガをアタッチする前に OnStart が終わらないように何かしておく(Sleep なり、Debug.Assert なり)。 BはAを起動する。Aが起動したらデバッガをアタッチ。以下同。 要は、デバッガをプロセスにアタッチしているつもりだけどできていない問題と、デバッガをプロセスにアタッチしているけど、アタッチした時には肝心のデバッグしたいメソッドが既に実行された後、という問題が混在しているという事かな? _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2007-07-25 13:08
BはAを呼んでいる(一番最初に実行するAのメソッドをcallしている)ので、BにアタッチしたらAがデバッグできると思っていたのがそもそもの間違い? って事みたいですね。 Bのサービスを開始した後は BのOnStartでSleepまたはassert、このときにAをアタッチ ということでしょうか? BのOnStartでSleepまたはassertした状態で、AにIDEからアタッチできるのでしょうか? sleepは試していませんが、Debug.Assertだとダイアログが表示されるのでIDEのメニュー(デバッグ-->プロセスのアタッチ)は使えないのでは?と思いますが、なにか私のやり方が違うのでしょうか? ・Aが単独でWINDOWSアプリケーションとして目的のとおり動くことを確認 ・BサービスからAを呼ぶ(一番最初に実行するAのメソッドをcall) ・Aにアタッチ→デバッグ この手順で進めるのが適切なのでしょうか? | ||||
|
投稿日時: 2007-07-25 15:22
・・混乱してきたような気がします・・ Aをdllにして、Bが参照するようにし、OnStartでAの一番最初に実行される メソッドを呼んでみたのですが、 ・ブレークポイントを設定しその部分で処理を一時ブレークする ・ブレークしたところの変数を調べる は、やはりできません。なにか思い違いでしょうか? |