Unicode下TRACE中文(_CrtDbgReport: String too long or IO Error) .解决办法

简介: Unicode下TRACE中文(_CrtDbgReport: String too long or IO Error)        在使用Unicode的工程项目中,如果是Debug模式。当TRACE Unicode字符串时,会输出提示:_CrtDbgReport: String too lon...

Unicode下TRACE中文(_CrtDbgReport: String too long or IO Error)       

在使用Unicode的工程项目中,如果是Debug模式。
当TRACE Unicode字符串时,会输出提示:_CrtDbgReport: String too long or IO Error

有两种方法来解决这个问题


方法一:直接使用 OutputDebugString 替换 TRACE

相关说明:
函数原型:void OutputDebugString(LPCTSTR lpOutputString);
功能说明:该函数输出一个字符串给调试器用于显示
例子:
原语句:TRACE(_T("\n这是一个TRACE语句"));
替换为:OutputDebugString (_T("\n这是一个TRACE语句"));
其他相关函数:
1. CheckRemoteDebuggerPresent:用于判断指定进程是否在调试状态
2. ContinueDebugEvent:使调试器继续运行之前报告了debugging event的线程
3. DebugActiveProcess:使调试器附加到一个活动进程上并进行调试
4. DebugActiveProcessStop:停止正在调试指定进程的调试器
5. DebugBreak:在当前进程中触发一个断点
6. DebugBreakProcess:在指定的进程中触发一个断点
7. DebugSetProcessKillOnExit:空白
8. FatalExit:空白
8. FlushInstructionCache:空白
10. GetThreadContext:空白
11. GetThreadSelectorEntry:空白
12. IsDebuggerPresent:空白
13. OutputDebugString:
14. ReadProcessMemory:空白
15. SetThreadContext:空白
16. WaitForDebugEvent:空白
17. WriteProcessMemory:空白


方法二:调用setlocale将语言环境设置成中文
相关说明:
函数原型:char *setlocale(int category,const char *locale );
功能说明:给指定的类别设置语言环境
注意:需要将原先的语言环境保存,待使用完后将其恢复。
例子:
#include <locale.h>
char* old_locale = _strdup( setlocale(LC_ALL,NULL) );   

setlocale( LC_ALL, "chs" );              

//正常使用TRACE,退出时调用下面函数    

setlocale( LC_ALL, old_locale);
free(old_locale);
其他相关函数:
1. char *_strdup(const char *strSource );
   调用malloc分配内存,并将源字符串复制一份,需要用free释放。

//======================================================================
优缺点比较:
方法一:优点:不需要增加任何函数调用,可以直接使用OutputDebugString输出字符串
                缺点:不能格式化输出。需要预先将字符串格式化
方法二:优点:可以直接使用TRACE,不加任何改变
                缺点:需要进行例子中的操作。

疑问:

1. 调用char* plocale = setlocale(LC_ALL,NULL);    返回值是"C."对吗?

目录
相关文章
|
6月前
javaDataUtil将 Date 转为 LocalDateTime转Long转String转Date
javaDataUtil将 Date 转为 LocalDateTime转Long转String转Date
122 1
|
6月前
|
Go
Go string bytes、strings、strconv和unicode包相关方法
Go string bytes、strings、strconv和unicode包相关方法
52 0
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
3月前
|
Java Android开发
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
502 1
|
5月前
|
Java API
将`List<String>`转换为`List<Long>`
将`List<String>`转换为`List<Long>`
|
6月前
|
Java
Intellij IDEA运行报Command line is too long的解决办法
Intellij IDEA运行报Command line is too long的解决办法
412 1
|
6月前
io.lettuce.core.RedisCommandTimeoutException: Command timed out 解决办法
io.lettuce.core.RedisCommandTimeoutException: Command timed out 解决办法
80 0
|
6月前
|
NoSQL Java Redis
SpringBoot连接Redis出现io.lettuce.core.RedisCommandTimeoutException:Commandtimedout解决办法
SpringBoot连接Redis出现io.lettuce.core.RedisCommandTimeoutException:Commandtimedout解决办法
219 0
|
6月前
|
存储 安全 前端开发
Java中的String类与StringBuilder、StringBuffer的比较:缺点与解决办法
Java中的String类与StringBuilder、StringBuffer的比较:缺点与解决办法
90 0
|
网络协议 C++ Docker
Docker pull拉取镜像报错“Error response from daemon: Get "https://registry-1.docker.io/v2”解决办法
Docker pull拉取镜像报错“Error response from daemon: Get "https://registry-1.docker.io/v2”解决办法
27758 1