如何在運行HTTP服務器的Linux機器上設置與WinDbg和朋友一起使用的符號服務器?Linux上的PDB符號服務器
上游符號服務器provided by Microsoft are HTTP servers(例如http://msdl.microsoft.com/download/symbols
),我想模仿他們的行爲,並使通常的Win32調試器從我自己的下載符號。
如何在不模擬Windows的各個部分(例如通過Wine或KVM)的情況下實現此目標?
如何在運行HTTP服務器的Linux機器上設置與WinDbg和朋友一起使用的符號服務器?Linux上的PDB符號服務器
上游符號服務器provided by Microsoft are HTTP servers(例如http://msdl.microsoft.com/download/symbols
),我想模仿他們的行爲,並使通常的Win32調試器從我自己的下載符號。
如何在不模擬Windows的各個部分(例如通過Wine或KVM)的情況下實現此目標?
您可以使用python symstore包將PDB(和exe/dll)文件發佈到本地symstore目錄,然後您只需要將該目錄與Web服務器一起提供即可。
每次需要發佈新的PDB時間/ exe/dll文件,把它們放在你的網絡服務器上。然後運行由python包提供的'symstore'命令,例如
symstore在/ var/WWW /符號PDB1 PDB2 ...
這將複製所有指定的文件來糾正在/ var/WWW /符號的子目錄和創建的元文件事務條目符號商店。
symstore軟件包還提供了python API,因此可以從任何python進程以編程方式進行發佈。
Symstore包安裝說明在這裏:https://pypi.python.org/pypi/symstore/0.1.1
如果你還沒有,你可能想要刷上how to create a symbol store on Windows,因爲要在Linux上創建一個,你需要創建一個兼容的文件結構。
首先,需要注意的是,通過http共享符號服務器並不是特別的。一旦創建了一個符號存儲庫,它只是一個可以通過http訪問的地方。所以,真正重要的是symstore.exe
所做的工作。
我知道你不想使用招待仿真的想法,但你真的有2種選擇:
symstore.exe
。 (我不知道KVM在這裏工作得有多好。)symstore.exe
的功能。重塑symstore.exe
可以很簡單,如果你不希望使用任何其更先進的功能,如交易,文件鏈接,或多個用戶能夠導入。
的什麼symstore.exe
的簡化視圖的作用:
pdb
的名稱輸出子目錄的子目錄。pdb
文件並創建一個包含散列名稱的子文件夾。pdb
複製到散列目錄,可選地壓縮它。 (或者,取決於標記,將文件file.ptr
與pdb
正在從中導入的位置相關聯。)refs.ptr
,其中包含有關導入的PDB的一些信息。 (我不相信這個文件實際上被客戶端使用,dgbhelp.dll
,所以這一步可能被省略。)[output directory]\000Admin
中的文件以支持事務。 (同樣,這裏僅用於未來運行的symstore.exe
。)pingme.txt
。(更多信息here。)
這聽起來不是很複雜,但毫無疑問,它可能需要一些時間才能得到正確的。首先,您可能需要查看Mozilla's build script,其中pdb
位於Windows調試器知道如何讀取的結構中。關於它的更多信息可在here獲得。
更新:請參閱more detailed answer of mine。
既然你都是有符號的管理員的假設,你可以這樣做:
symstore.exe
店。要添加新的符號,再次執行您的Windows機器上symstore.exe
。然後再次上傳所有文件。您可以跳過已存在於服務器上的文件,除了pingme.txt
。現有文件不應該改變,否則它們的散列值也應該不同,這意味着它們位於不同的子目錄中。
您可能想保護您的符號不被訪問。 WinDbg至少支持基本身份驗證,支持.htaccess
和.htpasswd
。我想你對此很熟悉。
有趣的想法。所以這些文件包含相對路徑? – 0xC0000022L
哪些文件包含相對路徑?我簡單地使用Filezilla,將我的文件從'c:\ productsymbols'上傳,包括所有子文件夾到'ftp:// symbols.example.com /',symbols.example.com也可以通過HTTP訪問。 –
是很重要的是,你可以使用'symstore.exe'存儲符號服務器上的符號文件或這將是確定你的符號服務器能夠下載被訪問只要? –
@ThomasW .:僅下載訪問很好,不需要'symstore.exe'功能。 – 0xC0000022L