我有一個主要的應用程序從他們編譯的DLL文件加載驅動程序。我遇到了一個問題,我希望能夠調試這些dll文件,但符號不會被項目加載。無法加載DLL的符號在C#項目
dll文件是解決方案的一部分,但必須與主應用程序分開構建。然後,主應用程序在運行時從目錄加載這些dll。我在其中一個加載的dll文件中出現錯誤(不是一個例外,只是意外的結果),但無法調試這些文件。任何人都可以給我一個關於如何繼續調試這些的想法嗎?
編輯: 舉的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不顯示在那裏。
是否有任何幫助[文檔](https://msdn.microsoft.com/library/ms241613)?如果沒有,具體是什麼是你的問題?獲得.pdb的?讓他們加載?調試沒有.pdb的? –
假設Visual Studio,在'Modules'窗口中,右鍵單擊您在調試時遇到問題的dll,並選擇'Symbol load information ...'選項。這應該給你一個想法,爲什麼符號沒有被加載(也許你已經啓用了「Just My Code」選項?)。也可以選擇「加載符號」,以便手動指定pdb文件。 – cynic
@Resistance,這是什麼dll文件,自定義類庫或其他?請確保您在工具 - >選項 - >調試 - >符號下啓用符號服務器。另外,你真的在你的項目中添加這個dll文件作爲參考嗎?如果將其添加爲參考,請設置屬性「copy local = true」。 –