我遇到了兩個版本的軟件問題。我有兩個可執行文件(MS和Linux)分別使用MSVC和GCC編譯庫。GDB在MSVC2012和GCC之間打印不同的C++輸出7.3.1
語境:
我的程序包含一個message_queue.hpp模板類,它從message_queue_inter.h接口繼承。該接口包含來自靜態庫的包含。 這兩個庫都經過了O2優化,沒有任何調試信息(調試信息格式 - >無MSVC和-g0 GCC)。事實是,雖然我正在調試兩個可執行文件(在Eclipse中),但GDB可以在我的派生類中找到成員的符號,並在我的MSVC可執行文件中找到基類(接口)(我可以在Eclipse中展開變量內容在調試視圖中)
相反,使用GNU/Linux庫的版本無法找到僅用於接口中成員的符號。 如果我嘗試從我的界面訪問成員,GDB會爲其返回「無數據字段」。派生(.hpp)類的所有成員都會正確顯示。
爲什麼MSCV和GCC編譯器有這樣的區別? 我注意到,當然,MSVC庫比GCC更大。 感謝「nm」工具,我可以注意到接口符號可以在我的MSVC lib中找到,但是在GNU/Linux中找不到。
我知道發佈版本不應包含任何調試信息,但我想知道爲什麼我有權訪問此變量使用MSVC而不是與GCC。 (爲了顯示消息隊列的內容,我需要構建一個最小G2的GCC調試版本來生成更多的符號)。
我迷路了!
感謝您的幫助。
謝謝馬克的答案。 PDB文件被有意刪除,所以客戶不需要額外的信息。由於性能和可視性的原因,我們希望避免使我們的靜態庫「調試」。 我想在這種情況下,我們將被迫編譯我們的GNU/Linux庫g2標誌? – David 2015-03-31 15:33:24
更多細節: 我剛剛在我的Windows庫上做了一個dumpbin.exe/ALL,我可以看到相對於我想要訪問的屬性的符號。 但是,當我在我的Linux庫上執行「nm」時,我看不到任何符號屬性。 – David 2015-04-02 14:42:37