您的位置:首页 > 其它

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

2012-12-03 15:17 471 查看

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."对吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: