關(guān)于CEGUI的String的調(diào)試問題
方法一:
CEGUI的字符串類設(shè)計(jì)的初衷是以32個(gè)字符為分界點(diǎn), 低于32個(gè)字符使用固定buffer, 高于才使用棧分配內(nèi)存存儲(chǔ)字符串. 不過因?yàn)镃EGUI使用utf32,兼容性雖然很好,但是在VC調(diào)試器里無法顯示是個(gè)很大的問題.
這里參考了mybios博客中的文章,給CEGUI字符串做一個(gè)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調(diào)試器中看到CEGUI字符串內(nèi)容, 不過中文還是暫時(shí)無法支持
方法二:
CEGUI的String不是std::string或std::wstring,而是自己實(shí)現(xiàn)的一個(gè)字符串類,他的功能跟std的string很接近。
但是,他支持unicode,內(nèi)部存儲(chǔ)是使用utf32編碼規(guī)范來存儲(chǔ)unicode字符,也就是說 typedef uint32 utf32; utf32* d_buffer;用這個(gè)32位無符號(hào)整型的數(shù)組來保存unicode字符串。優(yōu)點(diǎn)是顯而易見的,就是世界上所有字符都可以包囊進(jìn)去,畢竟是32位啊!但是,缺點(diǎn)也出來了,有兩點(diǎn):
第一、內(nèi)存占用過多,一個(gè)字符就要占4個(gè)字節(jié),也太浪費(fèi)了點(diǎn);
第二、調(diào)試不方便,由于VS2005的調(diào)試窗口只支持ansi和utf16的格式,所以,CEGUI的String在調(diào)試器中只能看到一堆數(shù)字?jǐn)?shù)組,而看不到字符,這是很郁悶的,每次要查看都要翻到內(nèi)存那里看,而且還一堆亂碼,超級(jí)麻煩。
解決辦法:修改String類,使用utf16來代替CEGUI的utf32。
優(yōu)點(diǎn):
解決了內(nèi)存占用過多的問題,一個(gè)字符只要2個(gè)字節(jié)就可以了;
解決了調(diào)試問題,VS2005直接支持utf16的顯示。
缺點(diǎn):
可能不支持全世界的字符,因?yàn)閡tf16不能表示超過16位的字符,但是,對(duì)于大多數(shù)國(guó)家的字符來說,已經(jīng)足夠了,畢竟windows2000/xp也是基于utf16編碼的。
然后,下面是修改后的字符串類:CEGUIString
posted on 2010-05-18 16:36 CrazyDev 閱讀(1041) 評(píng)論(1) 編輯 收藏 引用