我正在使用带有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
以下是我在debug中使用的预处理器定义:
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)
我确保我的配置都使用多字节字符集。
答案 0 :(得分:2)
在我100%的经验中,当调试器中的某些内容成功但未通过调试器时,您已超出函数本地数组。
答案 1 :(得分:1)
问题是由于我正在使用
进行编译Multi-threaded Debug DLL (/MDd)
而不是
Multi-threaded DLL (/MD)
处于发布模式。