2014-01-18 48 views
1

如何在運行HTTP服務器的Linux機器上設置與WinDbg和朋友一起使用的符號服務器?Linux上的PDB符號服務器

上游符號服務器provided by Microsoft are HTTP servers(例如http://msdl.microsoft.com/download/symbols),我想模仿他們的行爲,並使通常的Win32調試器從我自己的下載符號。

如何在不模擬Windows的各個部分(例如通過Wine或KVM)的情況下實現此目標?

+0

是很重要的是,你可以使用'symstore.exe'存儲符號服務器上的符號文件或這將是確定你的符號服務器能夠下載被訪問只要? –

+0

@ThomasW .:僅下載訪問很好,不需要'symstore.exe'功能。 – 0xC0000022L

回答

4

您可以使用python symstore包將PDB(和exe/dll)文件發佈到本地symstore目錄,然後您只需要將該目錄與Web服務器一起提供即可。

  • 配置Web服務器的目錄服務器競賽,比如/ var/WWW /符號
  • 安裝 'symstore' Python包

每次需要發佈新的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

5

如果你還沒有,你可能想要刷上how to create a symbol store on Windows,因爲要在Linux上創建一個,你需要創建一個兼容的文件結構。

首先,需要注意的是,通過http共享符號服務器並不是特別的。一旦創建了一個符號存儲庫,它只是一個可以通過http訪問的地方。所以,真正重要的是symstore.exe所做的工作。

我知道你不想使用招待仿真的想法,但你真的有2種選擇:

  1. 上使用類似葡萄酒在Linux中直接執行symstore.exe。 (我不知道KVM在這裏工作得有多好。)
  2. 重新創建您需要使用的symstore.exe的功能。

重塑symstore.exe可以很簡單,如果你不希望使用任何其更先進的功能,如交易,文件鏈接,或多個用戶能夠導入。


的什麼symstore.exe的簡化視圖的作用:

  1. 創建與導入的每個pdb的名稱輸出子目錄的子目錄。
  2. 散列pdb文件並創建一個包含散列名稱的子文件夾。
  3. pdb複製到散列目錄,可選地壓縮它。 (或者,取決於標記,將文件file.ptrpdb正在從中導入的位置相關聯。)
  4. 在散列目錄中追加一行到refs.ptr,其中包含有關導入的PDB的一些信息。 (我不相信這個文件實際上被客戶端使用,dgbhelp.dll,所以這一步可能被省略。)
  5. 更新[output directory]\000Admin中的文件以支持事務。 (同樣,這裏僅用於未來運行的symstore.exe。)
  6. 在輸出文件夾中觸摸pingme.txt

(更多信息here。)

這聽起來不是很複雜,但毫無疑問,它可能需要一些時間才能得到正確的。首先,您可能需要查看Mozilla's build script,其中pdb位於Windows調試器知道如何讀取的結構中。關於它的更多信息可在here獲得。

1

更新:請參閱more detailed answer of mine


既然你都是有符號的管理員的假設,你可以這樣做:

  1. 創建「主」符號在機器上使用symstore.exe店。
  2. 創建一個新的虛擬主機或使用現有的域並創建一個存儲符號的子目錄。
  3. 上傳完整的主符號存儲的目錄

要添加新的符號,再次執行您的Windows機器上symstore.exe。然後再次上傳所有文件。您可以跳過已存在於服務器上的文件,除了pingme.txt。現有文件不應該改變,否則它們的散列值也應該不同,這意味着它們位於不同的子目錄中。

您可能想保護您的符號不被訪問。 WinDbg至少支持基本身份驗證,支持.htaccess.htpasswd。我想你對此很熟悉。

+0

有趣的想法。所以這些文件包含相對路徑? – 0xC0000022L

+0

哪些文件包含相對路徑?我簡單地使用Filezilla,將我的文件從'c:\ productsymbols'上傳,包括所有子文件夾到'ftp:// symbols.example.com /',symbols.example.com也可以通過HTTP訪問。 –