芳草春晖

偶尔记录自己思绪的地方...

 

关于CEGUI的String的调试问题

方法一:
CEGUI的字符串类设计的初衷是以32个字符为分界点, 低于32个字符使用固定buffer, 高于才使用栈分配内存存储字符串. 不过因为CEGUI使用utf32,兼容性虽然很好,但是在VC调试器里无法显示是个很大的问题.

这里参考了mybios博客中的文章,给CEGUI字符串做一个patch

然后需要找到vs2008的autoexp.dat文件

XP下位于:C:\Program Files\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\autoexp.dat

用记事本等工具打开, 在AutoExpand段中像这样添加:

[AutoExpand]
; CEGUI String
CEGUI::String = str =<d_quickbuff,su> length =<d_cplength>

即可在VC调试器中看到CEGUI字符串内容, 不过中文还是暂时无法支持


方法二:
CEGUI的String不是std::string或std::wstring,而是自己实现的一个字符串类,他的功能跟std的string很接近。
但是,他支持unicode,内部存储是使用utf32编码规范来存储unicode字符,也就是说 typedef  uint32 utf32; utf32*  d_buffer;用这个32位无符号整型的数组来保存unicode字符串。优点是显而易见的,就是世界上所有字符都可以包囊进去,毕竟是32位啊!但是,缺点也出来了,有两点:
第一、内存占用过多,一个字符就要占4个字节,也太浪费了点;
第二、调试不方便,由于VS2005的调试窗口只支持ansi和utf16的格式,所以,CEGUI的String在调试器中只能看到一堆数字数组,而看不到字符,这是很郁闷的,每次要查看都要翻到内存那里看,而且还一堆乱码,超级麻烦。

解决办法:修改String类,使用utf16来代替CEGUI的utf32。
优点:
解决了内存占用过多的问题,一个字符只要2个字节就可以了;
解决了调试问题,VS2005直接支持utf16的显示。
缺点:
可能不支持全世界的字符,因为utf16不能表示超过16位的字符,但是,对于大多数国家的字符来说,已经足够了,毕竟windows2000/xp也是基于utf16编码的。

然后,下面是修改后的字符串类:CEGUIString

posted on 2010-05-18 16:36 CrazyDev 阅读(1014) 评论(1)  编辑 收藏 引用

评论

# re: 关于CEGUI的String的调试问题 2010-05-19 18:04 战魂小筑

麻烦转载注明出处, 尊重下原作者的劳动,ok?
方法一的地址在我的博客:http://www.cppblog.com/sunicdavy/archive/2010/05/14/115356.html  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(1)

随笔档案

文章分类

文章档案

C/C++

CEGUI

Friend Bog

Game Industry

Lua

OGRE

Other

搜索

最新评论

阅读排行榜

评论排行榜