- - PR -
マルチスレッドのデバッグ方法について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-12-30 19:13
現在、ある機能をマルチスレッドで実行するアプリケーションを開発しているのですが、別スレッドのブレークポイントの設定ができず困っています。
class TestClass { static void Main(string[] args) { TestClass obj = new TestClass(); Thread thread = new Thread( new ThreadStart(obj.Start)); thread.Start(); } public void Start() { ※ここにブレークポイントを設定したい! (略) } } 単に、ブレークポイントを設定するだけではいけないのでしょうか。 実は今回初めてマルチスレッドのアプリケーションを開発することになり、大変苦戦しております。開発環境は、Visual Studio.NET 2003です。非常に愚問かもしれませんが、皆様のお知恵を拝借できれば幸いです。 [ メッセージ編集済み 編集者: るいるい 編集日時 2004-12-30 19:15 ] | ||||
|
投稿日時: 2004-12-31 05:29
南部です。
単にブレークポイントを設定するだけだと思いますが。 提示されているサンプルでブレークポイントの設定はできました。 もちろん、
は、 Console.WriteLine("ブレークポイント"); みたいな実行にして設定しましたが。 #Releaseじゃないよね? | ||||
|
投稿日時: 2004-12-31 15:10
大晦日にもかかわらず、レスを頂き感謝いたします。
実は、サンプルで書き込んだソースは実際はもうちょっと違うんです。 複雑だったので、かなりシンプルに書き直してあります。確かにおっしゃる通り、自分で掲載したこのサンプルソースでは問題なく、ブレークポイントが設定できることを確認しました。大変失礼致しました。 当然、Release モードではなく、Debug モードです。マルチスレッドは初心者ですが、通常のデバッグは慣れているつもりなんですが...。 実はこのアプリケーションは、Windows サービスなので、当然ながらサービスとしてバックエンドで実行しているプロセスに対してアタッチしてデバッグしています。 とりあえず、サービスとしてではなく、コンソールアプリに変更して、再度試してみたいと思います。 また、何かありましたらサポートしていただければ幸いです。 | ||||
|
投稿日時: 2005-01-03 18:23
単にブレークポイントを設定するだけです。で、なんとなく感なんですが、既に起動しているプロセスをアタッチしてブレークポイントを設定しているんですよね。で、見る限り起動時のイニシャルの箇所にブレークポイントを設定しようとしているっぽいんですけど。もう既にその場所は実行されたあとなのでは? 任意の場所からデバッグを開始したいなら、DebugBreakとか埋め込んどくと便利ですよ。 _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ | ||||
|
投稿日時: 2005-01-03 23:02
確かに、既に起動しているプロセスに対してブレークポイントを設定しています。実は、ブレークポイントを設定するときに、既にそのポイントが実行されてしまい、困っておりました。そこで、恥ずかしながらベタなやり方なのですが、
Thread.Sleep(20000); などで、一時的にプログラムを停止させ、その間にプロセスにアタッチするというやり方をとっておりました。ですので、既に実行されている事はないと思うのですが。 (正月明けの明日、再度確認します!) DebugBreakについて、ネットで探していろいろとチャレンジしてみたのですが、なかなかうまく行きません。 ソース中に、 [System.Runtime.InteropServices.DllImport("kernel32.dll")] static extern void DebugBreak(); と埋め込み、これを任意の箇所でこのメソッド呼び出すという方法でしょうか。やり方がよくないんだと思いますが、「問題が発生したため、ThreadTest1.exe を終了します。 ご不便をおかけして申し訳ありません。」というメッセージとともに、終了してしまいます。 お手数なのですが、もう少し具体的な方法をご教授いただければ幸いなのです。 また、Windows サービスのアプリ開発されている皆様は、どのようは方法でデバッグしているのでしょうか。 | ||||
|
投稿日時: 2005-01-03 23:11
タイマーで1分後にイベントが発生するようにして、メインの処理はそのタイマーイベントに書き込んでいます。 この間思いついたのですが、メインの処理はプロジェクトを分け、メインの処理、サービス、デバッグ用のプロジェクトの3部構成というのはどうでしょう? _________________ |
1