繁体   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