C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[11]: 【VB2008】各関数ごとにトレースログを取りたい。


(過去ログ 61 を表示中)

[トピック内 22 記事 (1 - 20 表示)]  << 0 | 1 >>

■35208 / inTopicNo.1)  【VB2008】各関数ごとにトレースログを取りたい。
  
□投稿者/ Sky (7回)-(2009/04/22(Wed) 11:19:57)

分類:[VB.NET/VB2005 以降] 

2009/04/22(Wed) 11:24:10 編集(投稿者)

VB2008で開発しています。

関数が呼ばれた流れを追いたいため、
トレースログを取ろうと思っています。
(正常時も異常時も取りたいです。)

関数が呼ばれたタイミングで
メソッド名をトレースログを出力しようと思っているのですが、
すべてのメソッドに記載するのは、大変だと思っております。

現在は以下のページを参考に、下のようにプログラムしています。
http://sonic64.com/2006-05-10.html
Trace.WriteLine(DateTime.Now.ToString() + " " + Me.GetType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name)
これを各メソッドの先頭に書いています。

ただこれですと、メソッドが増えるたびに
この処理を書かなければならず、非常に非効率であると思っております。

現在はすべてのコントロールを継承コントロールにして、
イベントだけは、継承コントロールでログを出すようにしています。
これだけでも、多少効率的かなと思っています。

なぜこのようなログを出す必要があるかと言いますと、
複数の会社でdllを作り合っているため、不具合発生時の原因が掴みづらいのです。
自分のプログラムに問題がないことを証明するために、
それぞれのプログラムでトレースログを出して、
不具合発生時に検証できる仕組みを提供することになっています。

何か良い方法はございませんか?
もしございましたら、アドバイス頂けたらと思っております。

ぜひよろしくお願い致します。


引用返信 編集キー/
■35210 / inTopicNo.2)  Re[1]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ .SHO (807回)-(2009/04/22(Wed) 11:27:51)
No35208 (Sky さん) に返信

> 自分のプログラムに問題がないことを証明するために、
> それぞれのプログラムでトレースログを出して、

このトレースログでは、自分のプログラムに問題がないことの
証明にはならないと思います。

引用返信 編集キー/
■35214 / inTopicNo.3)  Re[2]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ Sky (8回)-(2009/04/22(Wed) 11:34:40)
2009/04/22(Wed) 11:36:21 編集(投稿者)
2009/04/22(Wed) 11:35:14 編集(投稿者)

.SHO様

ご回答ありがとうございます。

No35210 (.SHO さん) に返信
>
> このトレースログでは、自分のプログラムに問題がないことの
> 証明にはならないと思います。
>
その通りですね。
私の説明が悪かったです。

プログラムが途中で落ちてしまうケースが何度か発生しており、
再現性のないものが多く発生しています。
このトレースログだけでは完璧ではないのですが、
問題を特定する手立てになると思うのです。

もちろんExceptionが発生していれば、
UnhandledExceptionをキャッチするしてログは出していますので、
それで基本的な不具合のログは出せています。

今回のケースはExceptionが発生することなく、
落ちてしまっているのです。。。

そもそもプログラムが落ちてしまうこと自体、
問題なのですが、再現性のない問題であるため、原因の究明が難しいのです。
トレースログを出すことで、少しでも問題の特定ができればと思っております。

詳細なログは、トレースログを見て、
それから原因と思われる場所が特定できれば、
さまざまなログを出そうと思っています。

以上、よろしくお願い致します。


引用返信 編集キー/
■35217 / inTopicNo.4)  Re[3]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ .SHO (808回)-(2009/04/22(Wed) 11:47:38)
なるほど。

全てのメソッドにトレースログを埋め込むよりは
まずはどのDLLで落ちているかを特定した方が良さそうな気がします。

状況から察するに、トレースログを埋め込む事によって
さらに現象が変化する可能性もあります。

引用返信 編集キー/
■35230 / inTopicNo.5)  Re[4]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ Sky (9回)-(2009/04/22(Wed) 16:29:09)
No35217 (.SHO さん) に返信
> なるほど。
>
> 全てのメソッドにトレースログを埋め込むよりは
> まずはどのDLLで落ちているかを特定した方が良さそうな気がします。
同感です。
とりあえずそれぞれのイベントの始めと
最後にトレースログを出力することにして、
どこで落ちたのかを特定できるようにはしています。
ただし、再現性のない不具合というものが
たくさん発生しているため、発生したそのときに
なるべく詳しいログがほしいのです。
そこで私が考えたのが、それぞれの関数でトレースログを出すことでした。
もっと良い案があれば、それでも構いません。

>
> 状況から察するに、トレースログを埋め込む事によって
> さらに現象が変化する可能性もあります。
>
ログの出力に関わる処理に不具合があれば。。。
ということでしょうか?
具体的にはどういうことですか?

また初めにもう少し詳しく書いていれば良かったのですが、
開発しているのは、Officeのアドインや、ActiveXコントロール、その他DLLです。
そのため、Officeが落ちてしまうということがあって困っております。
原因はOfficeとActiveXとの兼ね合いで有ったり、
アドインとOfficeの兼ね合いであったりします。

Officeの動作はユーザーに様々にされますので、
全く同じ状態を再現することが難しく思っております。

このような状況で最低限私が開発したプログラムに問題がないことや、
なるべく再現できるようにログを出すことを考えた際に、
すべてのメソッドでトレースログを出すことを考えました。
あまり有効ではありませんかね。。。

どのようにトレースログを出力すべきか、
アドバイス頂けますととても助かります。

ぜひよろしくお願い致します。
引用返信 編集キー/
■35232 / inTopicNo.6)  Re[5]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ .SHO (809回)-(2009/04/22(Wed) 16:45:19)
> Officeの動作はユーザーに様々にされますので、
> 全く同じ状態を再現することが難しく思っております。

それって再現性がないのではなく、再現させるのが難しいってことですか?
それだとまったく話は違ってくる。。。
引用返信 編集キー/
■35233 / inTopicNo.7)  Re[6]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ やじゅ (980回)-(2009/04/22(Wed) 16:50:45)
やじゅ さんの Web サイト
2009/04/22(Wed) 19:34:02 編集(投稿者)

使えるか分からんですか、一応ツールの紹介をば・・・
DevPartner Studio Professional Edition 実行時エラー検出
http://www.compuware.co.jp/products/devpartner_fm/devpartnerstudiopro/dpspe_feature_f6.html
引用返信 編集キー/
■35237 / inTopicNo.8)  Re[6]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ Sky (10回)-(2009/04/22(Wed) 17:41:26)
No35232 (.SHO さん) に返信
>>Officeの動作はユーザーに様々にされますので、
>>全く同じ状態を再現することが難しく思っております。
>
> それって再現性がないのではなく、再現させるのが難しいってことですか?
> それだとまったく話は違ってくる。。。

そうですね。
再現させることが難しいということになります。
誤解させて申し訳ございませんでした。

よろしくお願い致します。

引用返信 編集キー/
■35239 / inTopicNo.9)  Re[7]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ .SHO (810回)-(2009/04/22(Wed) 17:55:32)
> そうですね。
> 再現させることが難しいということになります。

その場合、やみくもにトレースログを埋め込んで、再現するのを
ただ待ち続けるのではなく、まずはどのようなオペレーションをすれば
(どのような処理をさせれば)再現するのかを特定する方が先だと思います。

自分で現象を再現させることが出来なければ、仮にトレースログで
バグを修正出来たとしても、本当にそれで正しいのかどうかの検証が
出来ないと思います。

引用返信 編集キー/
■35246 / inTopicNo.10)  Re[8]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ Jitta on the way (306回)-(2009/04/22(Wed) 19:22:24)
# 面倒なのでここに付けます。


まず、自分の所で作った全てのメソッドを、単体でテストしてみてはどうでしょう。
今、追加しようとしているログは、「メソッドを開始した」ことしかわかりません。しかし、「異常終了の理由(している箇所)が自分の所にはない」ことを調べるためには、「メソッドを無事抜け出した」ことを記録する必要がないでしょうか。でもこれの記録は、まず不可能でしょう。

では次に考えられるのは、「異常な引数を渡されない限り、自分の所では落ちない」ことを調べるということではないでしょうか。さらに、「ある程度の異常な引数なら、検出して修正する(上位に異常を知らせる)」ことが試験できればいいと思います。
引用返信 編集キー/
■35248 / inTopicNo.11)  Re[7]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ Sky (11回)-(2009/04/22(Wed) 19:48:57)
No35233 (やじゅ さん) に返信
> 使えるか分からんですか、一応ツールの照会をば・・・
> DevPartner Studio Professional Edition 実行時エラー検出
> http://www.compuware.co.jp/products/devpartner_fm/devpartnerstudiopro/dpspe_feature_f6.html

ありがとうございます。
開発環境では使えそうですね。

本番環境にインストールするには許可が必要で、
端末数も多いためできなそうですが、資料請求してみようかと思いました。

ご紹介頂きありがとうございます。

引用返信 編集キー/
■35249 / inTopicNo.12)  Re[8]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ Sky (12回)-(2009/04/22(Wed) 19:55:10)
2009/04/22(Wed) 19:55:33 編集(投稿者)

No35239 (.SHO さん) に返信
>>そうですね。
>>再現させることが難しいということになります。
>
> その場合、やみくもにトレースログを埋め込んで、再現するのを
> ただ待ち続けるのではなく、まずはどのようなオペレーションをすれば
> (どのような処理をさせれば)再現するのかを特定する方が先だと思います。
>
> 自分で現象を再現させることが出来なければ、仮にトレースログで
> バグを修正出来たとしても、本当にそれで正しいのかどうかの検証が
> 出来ないと思います。
>
その通りだと思います。

そうなるとテストを繰り返すしかないということでしょうか?
少しでも再現性を高めるためにログを出力することも大切かなと
思っているのですが。。。
あまり意味がないですかね。。。

WordやExcelが一見私のプログラムと関係のない部分で異常終了した場合に、
私のプログラムが問題ないということを証明するのは難しいですよね。。。

トレースログの強化よりはテストを重ねたほうが良いのではないか
ということですよね?
ありがとうございました。


引用返信 編集キー/
■35250 / inTopicNo.13)  Re[9]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ .SHO (811回)-(2009/04/22(Wed) 20:06:18)
> そうなるとテストを繰り返すしかないということでしょうか?

ある程度は、落ちた時の状況を再現できないのでしょうか?
落ちた時に Word や Excel で使用していたファイルを
差支えない範囲でもらうとか、どのようなことをしていたのか聞くとか。

> 少しでも再現性を高めるためにログを出力することも大切かなと
> 思っているのですが。。。

ログを出力することで再現性が高まるとは思えません。

> あまり意味がないですかね。。。

まったく意味がないことはないと思います。
ログからバグを見つけて、どうすれば落ちるかを逆に考察するという
方法もなしではないと思いますが、非効率だと思います。

> WordやExcelが一見私のプログラムと関係のない部分で異常終了した場合に、
> 私のプログラムが問題ないということを証明するのは難しいですよね。。。

とにかく、同じオペレーションで必ず再現させることが出来れば
可能だと思います。

> トレースログの強化よりはテストを重ねたほうが良いのではないか
> ということですよね?

最悪の場合、メモリ破壊などで実際のバグとは関係ないところで落ちる場合は
トレースログでは、何の証明にもならないですね。

引用返信 編集キー/
■35251 / inTopicNo.14)  Re[9]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ Sky (13回)-(2009/04/22(Wed) 20:32:43)
No35246 (Jitta on the way さん) に返信
> # 面倒なのでここに付けます。
>
>
> まず、自分の所で作った全てのメソッドを、単体でテストしてみてはどうでしょう。
> 今、追加しようとしているログは、「メソッドを開始した」ことしかわかりません。しかし、「異常終了の理由(している箇所)が自分の所にはない」ことを調べるためには、「メソッドを無事抜け出した」ことを記録する必要がないでしょうか。でもこれの記録は、まず不可能でしょう。
>
そうですよね。
終了する場合のログも出さないとログとしては不十分ですね。
ログを出すのであれば、ログから終了が分かるように工夫が必要かもしれませんね。

> では次に考えられるのは、「異常な引数を渡されない限り、自分の所では落ちない」ことを調べるということではないでしょうか。さらに、「ある程度の異常な引数なら、検出して修正する(上位に異常を知らせる)」ことが試験できればいいと思います。

単体テストの品質を上げることは大切ですよね。
トレースログよりはテストの数を増やすほうが大切ですかね。
ありがとうございます。
参考になりました。

引用返信 編集キー/
■35252 / inTopicNo.15)  Re[10]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ Sky (14回)-(2009/04/22(Wed) 20:37:22)
No35250 (.SHO さん) に返信
>>そうなるとテストを繰り返すしかないということでしょうか?
>
> ある程度は、落ちた時の状況を再現できないのでしょうか?
> 落ちた時に Word や Excel で使用していたファイルを
> 差支えない範囲でもらうとか、どのようなことをしていたのか聞くとか。
>
ファイルは可能な限り、貰っています。
ただ1つのファイルを長い時間開いて操作して、
保存せずに異常終了というケースが多いためか、
頂いたファイルから再現できないケースが多いです。

>>少しでも再現性を高めるためにログを出力することも大切かなと
>>思っているのですが。。。
>
> ログを出力することで再現性が高まるとは思えません。
>
再現性という意味ではあまり良い選択ではないですよね。
言われるとその通りだと思います。

>>あまり意味がないですかね。。。
>
> まったく意味がないことはないと思います。
> ログからバグを見つけて、どうすれば落ちるかを逆に考察するという
> 方法もなしではないと思いますが、非効率だと思います。
>
やらないよりはマシという程度ですかね。
そう思えてきました。


>>WordやExcelが一見私のプログラムと関係のない部分で異常終了した場合に、
>>私のプログラムが問題ないということを証明するのは難しいですよね。。。
>
> とにかく、同じオペレーションで必ず再現させることが出来れば
> 可能だと思います。
>
やはり再現性ですね。
ユーザーには迷惑をかけますが、
なるべくファイルを保存するようにしてもらって、
操作手順も意識してもらうしかないのかもしれませんね。


>>トレースログの強化よりはテストを重ねたほうが良いのではないか
>>ということですよね?
>
> 最悪の場合、メモリ破壊などで実際のバグとは関係ないところで落ちる場合は
> トレースログでは、何の証明にもならないですね。
>
そうですね。
また今回であれば、Officeのバグだったりすると
対応しきれなかったり、なかなか難しいところがあります。

ありがとうございました。


引用返信 編集キー/
■35253 / inTopicNo.16)  Re[11]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ .SHO (812回)-(2009/04/22(Wed) 20:48:51)
> ただ1つのファイルを長い時間開いて操作して、
> 保存せずに異常終了というケースが多いためか、
> 頂いたファイルから再現できないケースが多いです。

この情報だけでもいろいろ試してみたくなることがありますね。
巨大なExcelファイルをあらかじめ作って、それを読み込んで
いろいろいじってみる。

とか

DLLで提供している機能をエンドレスで呼び続けるマクロを作って
動かしておくとか…
引用返信 編集キー/
■35255 / inTopicNo.17)  Re[9]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ 渋木宏明(ひどり) (1122回)-(2009/04/22(Wed) 21:07:20)
渋木宏明(ひどり) さんの Web サイト
2009/04/22(Wed) 21:30:11 編集(投稿者)

> そうなるとテストを繰り返すしかないということでしょうか?
> 少しでも再現性を高めるためにログを出力することも大切かなと
> 思っているのですが。。。
> あまり意味がないですかね。。。

ログにまるで使い道がないわけではありませんが、ログをとることが直接再現性を高めることはありません。

まずは再現手順や、再現の条件をつかまえることが重要です。

手元の環境では全く再現できていないんでしょうか?

それとも、再現したことはあるが、状況をつかみ切れなかったとか?

たとえば、VMware の有償版では仮想マシンで実行されたすべての事象を記録・再生することができるので、障害発生以前から障害発生直後までの状態をすべて保存して、あとからじっくりと何度でも検討することができます。

引用返信 編集キー/
■35264 / inTopicNo.18)  Re[10]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ Jitta on the way (308回)-(2009/04/23(Thu) 07:33:04)
No35251 (Sky さん) に返信
> 終了する場合のログも出さないとログとしては不十分ですね。
> ログを出すのであれば、ログから終了が分かるように工夫が必要かもしれませんね。

そうです。
ログは、「ここを通りました」ではなく、「こんな処理をします」のほうが、分かりやすいログになります。
あるいは、引数の値をログに追加するべきでしょう。少なくとも、どのメソッドがどんな値を処理しようとして落ちたのかわかります。単体テストで再現させられるかも知れません。



> トレースログよりはテストの数を増やすほうが大切ですかね。

再現が難しく、原因もわかっていない今は、取り決めたインターフェースの範囲内で異常終了しないことを確認する方が良いと思います。
引用返信 編集キー/
■35271 / inTopicNo.19)  Re[12]: 【VB2008】各関数ごとにトレースログを取りたい。
□投稿者/ Sky (15回)-(2009/04/23(Thu) 09:55:06)
No35253 (.SHO さん) に返信
> この情報だけでもいろいろ試してみたくなることがありますね。
> 巨大なExcelファイルをあらかじめ作って、それを読み込んで
> いろいろいじってみる。
>
これはやっていますね。
やっているといっても程度の違いはあるでしょうが。。。

> DLLで提供している機能をエンドレスで呼び続けるマクロを作って
> 動かしておくとか…

これは面白いですね。
工夫すれば、自動でもテストできそうですね。

引用返信 編集キー/
■35273 / inTopicNo.20)  Re[10]: 【VB2008】各関数ごとにトレースログを取りたい。
 
□投稿者/ Sky (16回)-(2009/04/23(Thu) 10:00:09)
No35255 (渋木宏明(ひどり) さん) に返信
>
> ログにまるで使い道がないわけではありませんが、ログをとることが直接再現性を高めることはありません。
>
> まずは再現手順や、再現の条件をつかまえることが重要です。
>
> 手元の環境では全く再現できていないんでしょうか?
>
> それとも、再現したことはあるが、状況をつかみ切れなかったとか?
>
全く再現できませんでした。
ユーザーもどのような操作をしたのかという部分が明確でないため、
(長い時間1つのファイルを保存せずに操作しているため、)
どの操作によって発生しているのかが分かりにくいのです。
(複数の操作が複雑に絡みあっている可能性もあります。)

> たとえば、VMware の有償版では仮想マシンで実行されたすべての事象を記録・再生することができるので、障害発生以前から障害発生直後までの状態をすべて保存して、あとからじっくりと何度でも検討することができます。
>
これは知りませんでした。
ユーザー環境には存在しませんが、開発環境としては
VMWare WorkStationを使用しているため、利用すればより良いテストができそうです。
勉強になりました。
ありがとうございます。


引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -