无符号字符的gdb表示 - 它是否不一致?

时间:2012-03-01 02:16:04

标签: c++ gdb

我一直在调试一些数字代码中的段错误(C ++,不依赖于任何外部库)。在优化级别-O0(使用gcc)编译并在gdb中运行时,我已经重现了segfault;我得到的回溯是:

(gdb) backtrace 2
#0  0x000000000040171c in QExpFloorLog_Q_R (q=Cannot access memory at address 0x7fffff7fefec) at GlobalFunctions.hpp:11
#1  0x0000000000401b50 in MinExponentFromTheoremTwo (q=2, k_q=20 '\024', r=1122053) at GlobalFunctions.hpp:90

MinExponentFromTheoremTwo的签名是:

unsigned char MinExponentFromTheoremTwo(const unsigned int q, const unsigned char k_q, const unsigned int r);

所以,我的问题是:我要对k_q=20 '\024'做些什么?我知道k_q是一个unsigned char,因此gdb给了我一个数值和一个ascii表示;我将其他地方的无符号字符变量列为var1=0 '\000'var2=1 '\001'等。但k_q似乎不匹配,值为20,代码为\ 024。我是否误解了如何使用unsigned char,或者这是否应该帮助我找到代码中的错误?

顺便说一下,我有

$ uname -a
Linux clayton-AOD255E 2.6.38-13-generic #53-Ubuntu SMP Mon Nov 28 19:33:45 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
$ g++ --version
g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2
$ gdb --version
GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

名为20的数字在基数10中表示为“20”。在基数8中,它是'24'。 \024是该值的八进制表示。

以下所有内容都是相同的值:

20     // decimal, base-10
024    // octal, base-8
'\024' // octal, base-8
0x14   // hex, base-16