我正在使用C++程序对XML文件使用boost序列化。
当我在 Debug模式下测试程序时,它运行良好。
然后,我尝试在 Release模式下使用完全相同的文件,但是加载文件时我的程序失败。我什至试图用 Release模式的程序生成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文件中时,它们在发布和调试配置之间的显示方式有所不同。看起来发行版本使用了不同的编码。
例如,“标题”显示为“X�〜T”
其他字符(如空格)完全改变了字符串的顺序,并插入了我无法复制粘贴的特殊字符(可能是\ 0)
我确保我的两个配置都使用多字节字符集。
最佳答案
以我100%的经验,当某项功能在调试器中成功执行但在调试器中失败时,您将覆盖函数本地数组。
关于c++ - 在调试中工作时,Boost序列化在 Release模式下失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3353482/