2016-11-08 9 views
1

コンパイル済みのdllファイルからドライバを読み込むメインアプリケーションがあります。私はこれらのdllファイルをデバッグできるようにしたいが、シンボルがプロジェクトによってロードされていないという問題が発生している。C#プロジェクトでdllのシンボルを読み込めません

dllファイルはソリューションの一部ですが、メインアプリケーションとは別にビルドする必要があります。メインアプリケーションは、実行時にこれらのdllをディレクトリからロードします。これらのロードされたdllファイル(例外ではなく予期しない結果)にエラーがありますが、ファイルをデバッグすることはできません。誰でも私にこれらのデバッグを続行する方法のアイデアを教えてもらえますか?

EDIT: DLLがここでロードされているかの良いアイデアを与えることがメインのプロジェクトからのコードです:あなたが見ることができるように

public List<BaseClass> getObjects(string objectName) 
{ 
    List<BaseClass> availableDrivers = new List<BaseClass>(); 

    string currentDir = Directory.GetCurrentDirectory(); 
    currentDir = Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath); //Use this to find path even when running as service 

    if (Directory.Exists(currentDir + "\\Objects")) 
    { 
     string[] files = Directory.GetFiles(currentDir + "\\Objects", "*.dll"); 
     foreach (string file in files) 
     { 
      Console.WriteLine("LOOKING AT:"+ file); 
      try 
      { 
       Assembly dll = Assembly.LoadFrom(file); 
       Type[] types = dll.GetTypes(); // .Where(x => x.BaseType.Name == "BaseClass"); 
       foreach (Type type in types) 
       { 

        if (type.BaseType != null && (type.BaseType.Name == "BaseClass" || type.BaseType.Name == "PeriodicBaseClass")) 
        { 
         BaseClass ClassObj = (BaseClass)Activator.CreateInstance(type); 

         if (objectName == "" || objectsName == ClassObj.Name) 
         { 
          availableDrivers.Add(ClassObj); 
         } 
        } 
       } 
      } 
      catch (Exception e) 
      { 
       Error.Log("Error reading driver:" + e.Message,MessageType.Error); 
       //Console.WriteLine("Error reading driver:" + e.Message); 
      } 
     } 
    } 
    return availableDrivers; 
} 

、私はプログラム自体を実行すると、ドライバがロードされますコンパイルされたdllファイルを取得して、dllコードにブレークポイントを入れると、シンボルをロードできないというメッセージが表示されます。デバッグ> Windows>モジュールをチェックしてみましたが、アプリケーションに直接ロードされていないため、DLLが表示されません。

+0

[documentation](https://msdn.microsoft.com/library/ms241613)には何らかのヘルプがありますか?そうでない場合は、特にあなたの問題は何ですか? .pdbの取得?それらをロードするには? .pdbのないデバッグ? –

+0

Visual Studioの 'Modules'ウィンドウで、デバッグに問題があるDLLを右クリックし、' Symbol load information ... 'オプションを選択します。これは、シンボルがロードされていない理由を知っているはずです(おそらく 'Just My Code'オプションが有効になっていますか?)。 'Load symbols 'オプションもあり、pdbファイルを手動で指定することができます。 – cynic

+0

@Resistance、このdllファイルとは何ですか、カスタムクラスライブラリですか? TOOLS-> Options-> Debugging-> Symbolsでシンボルサーバを有効にしてください。さらに、このdllファイルをプロジェクトの参照として実際に追加しますか?参照として追加する場合は、プロパティ "copy local = true"を設定してください。 –

答えて

0

だから私はこの問題を解決することになりました。私がこれをしたのは、メインアプリケーションと同じメソッドを実行するが、DLLを動的にロードするのではなく、ソリューション内のプロジェクトから小さなコンソールアプリケーションを作成することでした。

その後、スタートアッププロジェクトをコンソールアプリケーションに設定して、適切なファイルを適切に実行することができました。

0

問題のDLLがデバッグバージョン(つまり、デバッグ用にコンパイルされている)で、現在の.pdbファイルが同じディレクトリにある場合は、自分のものと同じようにそれらのステップを実行できますプロジェクト。

これらのdllをビルドするソリューションを開き、実行中のプログラムのプロセスにを添付してでデバッグする方法もあります。

https://msdn.microsoft.com/en-us/library/3s68z0b3.aspx

関連する問題