【发布时间】: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