gdb调试,显示utf-8字符

来源:互联网 发布:ahc淘宝旗舰店真的吗 编辑:程序博客网 时间:2024/05/28 15:14

gdb本身只支持ASCII, ISO-8859-1,set charset可以查看。直接print utf8的中文字符会出现乱码,
看到网上有个解决方法是在调试程序中加入一个打印的函数,感觉比较好用,分享
一下。

将如下代码和main函数放在一起,调试的时候 call pstring(s)就行。

void pstring(string& s){  for (int i = 0; i < s.length(); i ++){    int len = 0;    if(s[i] < 0) {// multi-bytes utf-8 stream      unsigned char h = static_cast<unsigned char>(s[i]);      if(h >> 4 == 0x0E) len = 3; // 1110XXXX 10XXXXXX 10XXXXXX      if(h >> 5 == 0x06) len = 2; // 110XXXXX 10XXXXXX      if(h >> 3 == 0x1E) len = 4; // 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX      if(h >> 2 == 0x3E) len = 5; // 111110xx 10XXXXXX 10XXXXXX 10XXXXXX10XXXXXX      if(h >> 1 == 0x7E) len = 6; // 1111110x 10XXXXXX 10XXXXXX 10XXXXXX10XXXXXX 10XXXXXX    }    else if (s[i] == 0)      return;    else len = 1; // ascii, 0XXXXXXX        string tmp = s.substr(i,len);    tmp += "/0";    cout<<tmp;  }  cout<<'/n';  fflush(stdout);}
void pstring(char * str){  string s=str;  for (int i = 0; i < s.length(); i ++){    int len = 0;    if(s[i] < 0) {// multi-bytes utf-8 stream      unsigned char h = static_cast<unsigned char>(s[i]);      if(h >> 4 == 0x0E) len = 3; // 1110XXXX 10XXXXXX 10XXXXXX      if(h >> 5 == 0x06) len = 2; // 110XXXXX 10XXXXXX      if(h >> 3 == 0x1E) len = 4; // 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX      if(h >> 2 == 0x3E) len = 5; // 111110xx 10XXXXXX 10XXXXXX 10XXXXXX10XXXXXX      if(h >> 1 == 0x7E) len = 6; // 1111110x 10XXXXXX 10XXXXXX 10XXXXXX10XXXXXX 10XXXXXX    }    else if (s[i] == 0)      return;    else len = 1; // ascii, 0XXXXXXX        string tmp = s.substr(i,len);    tmp += "/0";    cout<<tmp;  }  cout<<'/n';  fflush(stdout);}


原创粉丝点击