当前位置:编程学堂 > vs2010调试显示结果_vs2010调试窗口调试器UTF8显示汉字乱码

vs2010调试显示结果_vs2010调试窗口调试器UTF8显示汉字乱码

  • 发布:2023-10-06 15:57

VS2010运行结果错误错误LNK2038:检测到“_ITERATOR_DEBUG_LEVEL”不匹配:值“0”与值“2”不匹配。 1、错误原因:Debug使用Release库文件。 ? ?如果连接库里并添加两个库文件,但将release库文件放在debug前面,就会出现错误。因为程序默认是按顺序使用库文件的。 ? ?如果错误为错误 LNK2038:检测到“_ITERATOR_DEBUG_LEVEL”不匹配:值“2”与值“0”不匹配。 ? ?可能是release下使用了Debug库文件。一般来说,文件名后面带d的库文件是debug库文件,不带d的库文件是release库文件。 2. 解决方法: ? ?经过几天的查询,结合网友的智慧,我发现我们只需要在预处理定义中设置“_ITERATOR_DEBUG_LEVEL”的值,使其与待调试的程序一致即可。 ? ?在项目->属性->配置属性->C/C++->预处理器->预处理定义中添加“_ITERATOR_DEBUG_LEVEL=0”。 3. 补充英文说明: ? ?在 VS2010 中,迭代器调试级别在调试中默认为 2,在发布中被禁用。您正在使用的 dll 之一可能在调试中关闭了迭代器调试,因为它是在旧版本的 Visual Studio 中构建的,或者它们明确地将定义添加到项目中。 ? ?搜索 _ITERATOR_DEBUG_kon 和 _SECURE_SCL 删除它们或在所有项目和源中适当设置它们并重建所有内容。 _ITERATOR_DEBUG_konsub = 0 // 禁用(对于发布版本) _ITERATOR_DEBUG_LEVEL = 1 // 启用(如果定义了 _SECURE_SCL) _ITERATOR_DEBUG_LEVEL = 2 // 启用(对于调试版本)

记住:vs默认的调试显示变量是GB2312编码,而开发时c、cpp文档的编码格式通常需要UTF-8。本文档中中文字符串已经是UTF8,调试窗口使用GB2312显示乱码。 (本身并不是乱码)所以需要用S8来解释符号。

UTF-8?支持汉字,跨平台。

VS首先默认识别BOM(如果找不到,就编译成GBK格式,会陷入UTF-8),然后选择编码格式是否为UTF-8。推荐vs编译编码格式UTF-8?物料清单。 (博客其他部分详细介绍了如何在VS中使用UTF-8:原理是:加一句告诉编译器不要乱搞,整个文本都是UTF-8的!别乱搞!)

如上图所示,项目采用UTF-8格式编码,但在调试窗口中,中文显示乱码;

原因:调试窗口还假设文本是用本机窄字符集编码的,换句话说?调试窗口编码为GB2312

解决方案:

还好有‘s8’?格式说明符和此方法可以显示正确的值。如果我们将“,s8”附加到变量名称后,Visual Studio 将重新解析 UTF-8 格式的文本并正确呈现文本:(双击“名称”下面的字段,加上 ,s8?)

需要澄清的是,“s8”格式说明符适用于普通字符数组,但不适用于 std::string 变量。我去年向 Microsoft 报告了此问题,但他们显然已针对 Visual Studio 的未来版本对其进行了修改。

如何处理字符串?我采用了绕过曲线的方法,如下图(先c_str(),然后s8)

最近调整了程序,终于跑通了。结果,出现了“调试断言失败”错误。具体错误信息如下所示:

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

经过查找,发现有两个原因。一是打开调用时日志文件忘记初始化。

static void ConfigSysLog() ?{ ? ?FILE* pFile = fopen("d://fodsys.log", "a");?? ??? Output2FILE::Stream() = pFile;? ?FILELog ::ReportingLevel() = FILELog::FromString("INFO");

? //FILE_LOG(logINFO) << "云台 IP 为 " << FodUtil::cws2s(m_SysConfig.PtzIp);

? ?}

对于这个问题,在对话框的构造函数中添加

FodUtil::ConfigSysLog();

?

另一个原因是文件路径设置错误。由于我使用的是HP图形工作站,在棘手的分区过程中没有F驱动器,Axis SDK的视频文件录制路径是

#define FILENAME "F:\\axis_video4.bin"

最终还是报了上面的错误,最后把F盘换成现有的G盘,运行成功。

温馨提示

?

另外,在vs2010平台下,遇到如下错误信息:

1 >AxisMediaParserEvents.obj:错误 LNK2019:函数“受保护:void __thiscall CAxisMediaParserEvents::OnVideoSample(long,long,long,unsigned __int64,unsigned __int64,struct tagVARIANT &)”中无法解析的外部符号 _sws_scale (?OnVideoSample @CAxisMediaParserEvents@@IAEXJJJ_K0AAUtagVARIANT @@@Z) 在 1>AxisMediaParserEvents.obj 中引用:错误 LNK2019:无法解析的外部符号 _sws_getCachedContext,该符号位于函数“protected: void __thiscall CAxisMediaParserEvents::OnVideoSample(long,long,long, unsigned __int64,unsigned __int64,struct tagVARIANT &)" (?OnVideoSample@CAxisMediaParserEvents@@IAEXJJJ_K0AAUtagVARIANT@@@Z) 在

中引用

?

检查后发现Connector->Input->Additional Dependency中缺少一个lib库。添加之后,问题就不再存在了。

?

?

?

?

?

?

?

相关文章