簡體   English   中英

如何在Visual Studio中調試庫的發行版本

[英]how to debug a release version of library in Visual Studio

我需要調試鏈接庫的發布版本。 我已經在本文之后使用我的發布版本生成調試信息,但是我如何對庫項目執行相同的操作? 請注意,庫項目在屬性中沒有鏈接頁面,其中在上面的鏈接中創建了調試信息。 我正在使用VS2010。

我真正想要的是讓TRACE在調試庫時工作。 我試圖將調試版本的庫與發布exe鏈接,但它會創建鏈接器錯誤。

我真正想要的是讓TRACE工作......

你的意思是MFC TRACE宏? 將消息寫入調試器的調試/輸出窗口的那個?

不幸的是,即使您確實修復了構建設置,以便最終的可執行文件包含靜態庫的調試信息,它也不會帶回那些跟蹤語句。 TRACE是一個宏,因此由編譯器預處理器處理。 在發布模式下編譯時,該宏被重新定義為無操作。 就像從源代碼中刪除了TRACE語句一樣。

即使您確實解決了向庫和可執行文件添加調試符號的問題,也不會將這些跟蹤語句帶回來。 它們在編譯階段被刪除。

那么該怎么辦? 事實證明,如果你深入挖掘這些宏,他們最終會調用Win32函數OutputDebugString 此調用在ms庫的調試版和發行版中都可用。 所以...你可以用對OutputDebugString的顯式調用來替換跟蹤宏 - 編寫代碼並不方便,但至少你會在發布模式下獲得調試輸出。

順便說一句,幾年前我終於放棄了所有這些宏,我們已經用log4cplus調用完全替換了它們。 任何日志記錄框架都會比跟蹤宏更好 - 因為您真正需要跟蹤的時間不是在您調試時,而是在您的代碼處於生產狀態而您無法在本地重現問題時。 記錄客戶可以發送給您的文件要好得多,然后依靠只能在調試器中工作的跟蹤。 無論如何要考慮的事情......

靜態庫沒有鏈接,因此鏈接器選項不可用也就不足為奇了。 您基本上只需要告訴編譯器生成調試信息。 從那里開始,創建庫只不過是將一堆目標文件放在一個文件中。

基本上,只需告訴編譯器生成調試信息,該庫將包含調試信息。

暫無
暫無

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

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