簡體   English   中英

Wierdness調試Visual Studio C ++ 2008

[英]Wierdness debugging Visual Studio C++ 2008

我有一個遺留的C ++應用程序,最重要的是我們一直在使用makefile和VS2003的命令行工具進行構建。 我正在嘗試使用VS2008和MsBuild進行構建。 構建工作正常,但是我遇到了以前從未見過的錯誤,而在VS2008調試器中逐步調試只會使我感到困惑。

該應用程序鏈接了許多靜態庫,這些靜態庫分為兩類:屬於同一應用程序套件的靜態庫,以及在多個應用程序套件之間共享的庫。

最初,我每個靜態庫都有一個.csproj文件,兩個.sln文件,一個用於應用程序套件(包括特定於套件的庫),一個用於非套件特定的共享庫。 共享庫包含在鏈接中,而它們的項目未包含在應用程序套件.sln中。

該應用程序從一個共享庫之一中定義的類實例化一個對象。 該類具有包裝鏈接列表的類的成員對象。 鏈接列表類的構造函數將其“ head”指針設置為null。

當我運行應用程序並嘗試將元素添加到鏈接列表時,出現錯誤-頭指針包含值0xCCCCCCCC。 因此,我逐步調試一下。 並看到怪異。

當調試器中的當前行位於屬於靜態庫的源文件中時,頭指針包含0x00000000。 當我進入構造函數時,可以看到將指針設置為該值,而當我進入該類的任何其他方法時,可以看到頭部指針仍然包含0x00000000。 但是,當我進入應用程序套件.sln中定義的方法時,它包含0xCCCCCCCC。 這不像是被覆蓋。 來回更改取決於我當前正在調試的源文件。

因此,我將共享庫的項目包含在應用程序套件.sln中,現在我一直看到包含0xCCCCCCCC的頭指針。 看起來好像沒有調用鏈表類的構造函數。

所以現在,我完全感到困惑。 有人有想法么?

當您混合並匹配使用不同版本的CRT頭文件生成的代碼時,這是一個常見的事故。 2003年到2008年之間有很多更改。例如STL迭代器調試。 RTC功能(運行時錯誤檢查)將是另一個功能,這就是您看到的0xcccccccc值的來源。 它的意思是“未初始化的變量”。 您會看到此信息,因為結構或類的內存布局不相同。

您必須重新構建這些庫,並確保它們使用相同的編譯器設置來構建。 另外,請確保不要混合使用調試版本和發行版本。

暫無
暫無

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

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