簡體   English   中英

.NET:如何使用exe和pdb文件查找一行代碼的源代碼

[英].NET : How to find the source code for a line of code using the exe and pdb file

我需要使用exe和pdb文件查找一行代碼的源代碼。 exe和pdb文件用c#編寫。 生成了一個錯誤,並且Stacktrace聲明了一個行號,該行號與該源代碼行號不同步,因為該exe是在不久前編譯的。 我試圖找出導致問題的代碼行,因為它與exe有關。

簡短的答案:您無法從EXE和PDB獲取原始源代碼。

PDB和可執行文件都不包含原始源代碼。 PDB包含IL和源文件行號之間的映射。 因此,如果您的源文件已更改(在此上下文中已更改),則PDB會將IL映射到(可能)源文件中的錯誤行。

要獲得引發異常的行的確切源代碼,您需要原始源代碼。 如果使用版本控制,則需要查找生成.exe的提交。 該exe可能(但不一定)具有有用的版本信息,可以幫助您返回到exe編譯源的確切版本。

具體示例:在我公司,我們使用持續集成,每次通過它編譯代碼時,都會創建一個唯一的版本/內部版本號。 它還可以讓您通過給定觸發了CI構建的Github提交的鏈接,查看給定版本號所使用的代碼。 因此,就我而言,我將查看.exe文件並獲取版本/內部版本號(您應該能夠輕松找到執行此操作的方法)。 然后,我將轉到CI,找到該版本,然后導航至Github以獲取提交哈希(我需要簽出進行調試),然后簽出該版本的代碼,瞧, PDB行號應該可靠地匹配我正在查看的代碼。

如果不使用CI,則可以嘗試使用不太可靠的方法來確定exe的基礎。 例如,如果您知道EXE的編譯日期,則可能會為您提供您應該查看源代碼版本的線索,但這不一定是正確的。

暫無
暫無

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

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