2009-07-28 30 views
2

我找不到在靜態庫項目中使用Windows調試工具中的源服務器工具的方法, 與實際使用該庫的解決方案分開構建: 「ssindex.cmd」的輸出始終爲庫 (使用編譯器選項/ ZI和/ Fd)生成的PDB文件顯示「找到零源文件」。源服務器(適用於Windows的調試工具)可以與靜態庫項目一起使用嗎?

在此PDB上運行「srctool.exe -r」時不顯示任何內容,這可能意味着PDB文件不包含任何源文件信息。 在也構建爲同一解決方案 的測試應用程序的PDB文件上運行相同的命令會生成所有預期源文件的列表。

當應該從使用它的解決方案單獨構建靜態庫項目時,是否有一種方法可以使用源索引:

感謝您的任何建議!

回答

0

這可能意味着您在運行「ssindex」時沒有輸入正確的目錄,因此對於您需要的ssindex:/ source = C:/ SourceCode// symbols = C:/ SourceCode/bin/Debug我是不知道「來源」是否有大寫字母S,但應該是這樣!

+0

在我的情況下路徑名稱問題不是問題。我使用msdn中的dia2dump工具發現了以下內容: 對於二進制項目(EXE或DLL)的PDB,dia2dump的輸出包含標有「Found table:SourceFiles」部分的源文件列表 。使用爲靜態庫項目生成的PDB文件, 相應的部分總是顯示爲空。 所以我想這就是爲什麼「ssindex」不適用於靜態庫項目的原因。但我不知道 爲什麼這些信息沒有包含在PDB中,並且沒有找到任何「治癒」這個的編譯器設置。 – 2009-10-12 12:58:50

3

可以使用「/ Save」和「/ Load」選項分別存儲和加載靜態庫的源信息。使用這些選項可以爲您的圖書館存儲信息,然後在索引與圖書館鏈接的項目時將其導入。

爲索引庫解決方案建立索引時,需要在存儲索引信息的目錄中指定「/ Save」標誌,以存儲有關該庫源文件的索引信息。例如(假設你使用Subversion進行源代碼控制),

ssindex.cmd /System=SVN /Save=c:\source\libproj\srcinfo /Source=c:\source\libproj /Symbols=c:\source\libproj\Release\*.pdb 

當後來索引你的項目,包括你的圖書館,你與包含庫的源文件信息的目錄指定「/加載」標誌。例如,

ssindex.cmd /System=SVN /Load=c:\source\libproj\srcinfo /Source=c:\source\binproj /Symbols=c:\source\binproj\Release\*.pdb 

有兩個潛在問題可能會影響您使用此技術的能力。首先,一些源代碼管理提供者似乎不支持保存和加載源代碼控制信息。我知道Subversion提供程序的確如此,它看起來像SourceSafe提供程序,但我沒有檢查任何其他人。

其次,這種技術似乎只適用於一個外部靜態庫的開箱即用。似乎沒有辦法從多個目錄加載信息,並且每次使用「/ Save」選項時,腳本當前都會覆蓋目錄的內容。您可以編輯源控制提供程序模塊以追加到保存目錄中的文件而不是覆蓋它們,但我沒有嘗試過。

另外,請注意,如上所述,如果您的庫是作爲單獨解決方案的一部分構建的,則只需執行此操作。如果靜態庫是您正在建立索引的解決方案的一部分,則其源文件將包含在「/ Source」選項指定的路徑中。

0

運行svnindex.cmd時,總是告訴你

痛苦陷到SVN後,「發現零源文件」。PM(perl的模塊來處理SVN),我發現:

  1. 第一,svn.pm調用 「SVN信息-R $ SourceRoot」 要獲得在$ SourceRoot文件的所有版本信息(由/通過源選項),

  2. 然後svn.pm存儲了使用本地文件路徑爲重點

  3. svnindex.cmd調用在字典中的所有文件srctool -r讓所有的源文件信息在* .PDB,並使用源文件名作爲查詢在步驟2中保存的信息的密鑰。

的問題是:

svn.pm使用相對路徑,但* .PDB使用絕對路徑,所以你永遠不會找到任何文件SVN的日誌信息,那麼「發現零個源文件」

修正:

變化svn.pm線162:

$ LOCALFILE = LC $ 1;

$ LocalFile = $ SourceRoot。 「\」。 lc $ 1; #make路徑絕對

相關問題