- PR -

C# ソースファイル名やソースコード中の行数を取得することは可能か?

投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2005-08-05 17:37
実行履歴をコンソール出力したいと思います。

いちいち、
Console.WriteLine("ソースファイル Class1.cs の 123 行目を通過しました");
などと書いていては、クラス名を変更したり、行数がずれたりして面倒です。
"Class1.cs"や"123"といった情報(つまりソースコード中の位置)を
コンパイル時に取得する方法はあるのでしょうか?

同様に
"クラス Class1 の メソッド Get を通過しました"
といったコンソール出力もできるのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-05 17:52
スタック トレースについて調べてみてください。
ちなみにファイルなどの情報は、デバッグ情報がないと取得できませんよ。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-08-05 17:54
コード:
System.Diagnostics.Trace.WriteLine(
    System.Reflection.MethodInfo.GetCurrentMethod().DeclaringType.Name
    + "." + System.Reflection.MethodInfo.GetCurrentMethod().Name + " Called");

甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-08-05 17:59
C#でもデバッグビルドであれば行番号やメソッド名を取得することは可能なはずです。ですがデバッグ情報を逐一参照したり、スタック情報をトレースして関数名を求めるためパフォーマンスに大きな悪影響を与えます。C++のように単純には行きません。

Loggingを行うなら自作するよりもLOG4J.NETを活用されるのが良いと思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-08-05 22:19
アサート、というのもなかったかい?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-06 09:46
引用:

アサート、というのもなかったかい?


ありますよ。
System.Diagnostics.Trace.Assert()



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2005-08-07 23:31
ご回答ありがとうございます。

Reflectionをあまり使わなかったので、こういう時に使えると思い出せませんでした。

Traceクラスは知りませんでした。

LOG4で検索するとJava用のツールであるように説明されています。
C#(VS2003)に組み込んで使えるのでしょうか?
LOG4.NETをダウンロードおよび説明しているサイトを紹介願えればありがたいです。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-08-08 13:15
ここが参考になるかと
http://codezine.jp/a/article.aspx?aid=71

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