簡體   English   中英

使用rundll32.exe調試本機dll失敗,無法加載符號

[英]Debugging a native dll using rundll32.exe , fail to load symbols

我正在編寫一個本機dll,該dll將與rundll32.exe (我們的客戶端必須使用)一起運行。 我已經使用VS的調試屬性來定義:

Command: c:\windows\system32\rundll32.exe
Command Argument: $(TargetPath) , ENTRY_POINT

其中ENTRY_POINT是我的dll的導出函數,該函數遵循rundll32.exe接口。

此設置調用我的函數,但不會加載任何符號,因此不會觸發任何斷點。 我了解到,僅在調用MessageBox的入口之后才調用我的函數。

當我使用自己的容器應用程序(只是一個調用LoadlibraryGetProcAddressENTRY_POINT函數本身的exe Loadlibrary )時,所有斷點都會觸發,並且可以像往常一樣進行逐步調試。

什么會導致該行為?

MessageBox()為您提供了足夠的資源來解決此問題。 當顯示時,使用Debug + Break All進入調試器。 接下來,使用Debug + Windows + Modules,在列表中找到DLL。 右鍵單擊它,然后選擇“符號負載信息”。 您將獲得調試器在其中搜索PDB文件的所有目錄的列表。 確保其中之一存在它。

首先,您的“命令參數”設置不符合要求。 它應該是"$(TargetPath)" ENTRY_POINT 雙引號可以避免在路徑名中使用空格,不要使用逗號。

簡而言之:所有問題都源於在64Bit環境中調試32Bit dll。

從原始問題和注釋中提到的附帶問題可以看出,我在這里遇到的問題很少:

  1. 據稱已啟動的進程中沒有調試器。
  2. 手動附加時,不會加載符號。
  3. 當點擊“ Break All”時,進程將被視為死守。

原因是提到dll是32Bit而調試器是64Bit rundll32.exe的路徑被rundll32.exe64Bit版本。 通常,這會導致WOW64啟動32Bit版本的子進程-從而導致進程不同,因此調試器不存在。

謝謝大家

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM