【问题标题】:Boost serialization fails in release mode while working in debug在调试工作时,Boost 序列化在发布模式下失败
【发布时间】:2010-07-28 13:47:57
【问题描述】:

我正在使用带有 C++ 程序的 xml 文件的 boost 序列化。 当我在调试模式下测试我的程序时,它工作正常。 然后我尝试在发布模式下使用完全相同的文件,但我的程序在加载文件时失败。我什至尝试在发布模式下使用我的程序生成 xml 文件,然后将它们加载回来,它也崩溃了。

调用堆栈显示如下:

packs_ui_main.exe!boost::archive::basic_xml_grammar<char>::parse_start_tag(std::basic_istream<char,std::char_traits<char> > & is={...})  Line 219   C++

实际的错误更进一步,但我在调用堆栈中没有更深的调试信息。 我不明白发布和调试之间可能有哪些不同的设置可以解释这次崩溃。

编辑 1

这是我在调试中使用的预处理器定义:

WIN32;_CONSOLE;_DEBUG;__WXMSW__;__WXDEBUG__;_WINDOWS;NOPCH;_USE_32BIT_TIME_T;_CRT_SECURE_NO_WARNINGS

这是我在发布中使用的预处理器定义:

WIN32;NDEBUG;_WINDOWS;_CONSOLE;__WXMSW__;NOPCH;_USE_32BIT_TIME_T;_CRT_SECURE_NO_WARNINGS

其中一些来自 wxWidgets

编辑 2

我注意到,当我将字符串保存在 XML 文件中时,它们在我的发布配置和调试配置之间显示不同。看起来好像发布版本使用了不同的编码。

例如“title”显示为“X�~T” 其他字符(如空格)完全改变字符串的顺序并插入我无法复制粘贴的特殊字符(可能是 \0)

我已确保我的两个配置都使用多字节字符集。

【问题讨论】:

  • C++ 没有“调试模式”或“发布模式”的概念。添加编译器和不同的标志可能会有所帮助。

标签: c++ boost xml-serialization


【解决方案1】:

根据我 100% 的经验,当调试器中的某些事情成功,但在调试器中失败时,您已经超出了函数本地数组。

【讨论】:

    【解决方案2】:

    问题是由于我正在使用

    进行编译
    Multi-threaded Debug DLL (/MDd)
    

    而不是

    Multi-threaded DLL (/MD)
    

    处于释放模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-19
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      相关资源
      最近更新 更多