4

開発マシンでは正常に動作する Web アプリケーションがありますが、それを別のマシンにインストールすると、DLL に追加した新しいメソッドの 1 つでクラッシュします。

さらに詳しく見てみると、インストールされている PDB ファイルは私の開発マシン上にあるのに取り込まれません。そのため、開発マシンでそれらを削除しようとすると、新しいメソッドが同じようにクラッシュします。他の方法はまったくクラッシュしません。

私のメソッドは、PDB ファイルが存在する場合に発生しない「NullPointerException」をスローするだけです。

PDB ファイルの目的は知っていますが (投稿する前にこのサイトを検索しました)、アプリケーションの動作が変わることはありません。それはすべきですか?

編集:<release> all がnotにあることを忘れてい<debug>ました。そのため、PDB ファイルについて質問します。

4

1 に答える 1

3

コードで何が問題なのかを見つけました。ロガー部分では、log4Net を使用して、次のようなコードがあります。

public static void Info(string strMsg)
{
    StackTrace st = new StackTrace(true);
    StackFrame sf = st.GetFrame(1);
    _log.Info(string.Format("{0,-25} L{1:0000} {2}", sf.GetFileName().Substring(sf.GetFileName().LastIndexOf(@"\") + 1), sf.GetFileLineNumber(), strMsg));
}

そこで、エントリを次のように変更しました。

public static void Debug(string strMsg)
{
    StackTrace st = new StackTrace(true);
#if DEBUG
    StackFrame sf = st.GetFrame(1);
    _log.Debug(string.Format("{0,-25} L{1:0000} {2}", sf.GetFileName().Substring(sf.GetFileName().LastIndexOf(@"\") + 1), sf.GetFileLineNumber(), strMsg));
#else
    _log.Debug(string.Format("{0}",strMsg));
#endif            
}

そして今、PDB ファイルがなくてもすべて正常に動作します。そのため、スタックトレースから情報を取得するには PDB ファイルが必要です。

于 2012-11-05T09:40:24.580 に答える