2013-02-18 154 views
7

我正在使用CMAKE命令來安裝PDB文件,以便在我的C++應用程序的開發人員分發中啓用調試。該命令如下:使用cmake安裝的PDB文件

INSTALL(DIRECTORY ${PROJECT_BINARY_DIR}/Debug 
    DESTINATION bin 
    FILES_MATCHING 
    PATTERN *.pdb 
) 

而且,我已經成功在同一水平安裝用於構建開發人員發佈的有關人士介紹,在「SRC」文件夾,讓自己的頂級分發文件夾的外觀如:

include\ 
src\ 
lib\ 
bin\ 
share\ 
doc\ 
3rdparty\ 
etc\ 

我的問題是我怎麼才能讓PDB文件「知道」,其中源(我假定這是必需的)?有沒有可以實現這一目的的CMAKE命令?如果有的話,請欣賞一個小例子。感謝您的時間和興趣。

+1

你可能想看看[這個問題](http://stackoverflow.com/questions/27952/how-do-i-change-the-locations-of-source-files-in -a符號文件,PDB)。 – Angew 2013-02-19 08:12:53

+0

謝謝@Angew - 我閱讀帖子以及帖子中的鏈接。我真的必須經歷所有符號服務器業務嗎?我想我問的是:是否有一個聰明的方式來打包PDB和匹配源,以便我不必做任何事情(沿着第一個答案的路線)。 – 2013-02-19 14:49:29

+1

我沒有親臨現場調試的經驗,但我從所有讀到的有關移動PDB的印象中得到的印象是,您必須使用'subst'或完全反映原始源代碼樹。我打算有一天出於好奇調查這個問題;不幸的是,對於某些日期*的相當不明確的值,* – Angew 2013-02-19 14:58:56

回答

4

將我的意見轉化爲答案;主要基於來自question的信息以及其中的鏈接。

PDB文件存儲絕對到源文件的路徑名稱。不使用符號服務器時,確保某種程度的源代碼可重定位性的唯一方法是使用subst命令。

想法是使用subst爲源樹的根創建驅動器號名稱(例如N:\)。然後從這個驅動器開始構建,以便以N:\開頭的絕對路徑嵌入到PDB中。當您稍後需要在另一臺機器上調試可執行文件時,請在該機器上使用subst以獲取與源相同的絕對路徑。這將使PDB能夠找到源文件。

例如,如果你有一個文件C:\MySources\main.cpp,請執行下列操作:

subst N: C:\MySources 
N: 
run your build 

後來,假設您需要在同一個文件存儲在D:\Devel\Other\main.cpp一臺機器上進行調試。只需做subst N: D:\Devel\Other,然後在那裏從N:驅動器工作。

0

pdb文件存儲程序編譯時的文件路徑。沒有什麼可以讓他們知道源

+0

你確定嗎?我的意思是,如果它是PDB文件存儲的絕對路徑(源代碼的絕對路徑),那麼如何確定在另一個開發人員的工作站上使用時是否打包和裝運?如果它是相對的,那麼我是否應該確保將源安裝在與PDB相比相同的位置,與構建時相同?我希望我有道理.. – 2013-02-18 23:06:47

+0

你可以隨時測試這個...... Visual Studio(和WinDBG)都足夠聰明,可以映射PDB和源代碼的位置。 VS會在與加載模塊相同的目錄中查找PDB(也可以查看調試器中的模塊選項卡)。你也可以通過調試選項告訴VS在哪裏查看。當您點擊堆棧調用時,如果源位於不同的位置,VS會提示您輸入位置。這甚至適用於崩潰轉儲。如果我們都必須擁有完全相同的源樹佈局,那麼這種規模會有多糟糕? – 2016-07-20 17:35:48

1

你只需要通知visual studio的源代碼就可以......它會彈出一個文件瀏覽器對話框,如果路徑與構建路徑不同,只需指向本地機器上的源代碼即可。