如何解决使用GDB判断变量是带符号还是无符号
因此,我刚开始使用GDB,并且正在将以下程序用作练习
#include <stdio.h>
#include <stdlib.h>
int main() {
unsigned int value1,abs_value1,abs_value2,abs_value3;
int value2,value3;
char myarray[10];
printf("Enter 10 characters:");
fgets(myarray,11,stdin);
printf("Enter an integer between 0 and 10,000:");
scanf("%d",&value1);
abs_value1 = abs(value1);
printf("Enter an integer between -10,000 and 0:");
scanf("%d",&value2);
abs_value2 = abs(value2);
printf("Enter an integer between -10,000 and 10,&value3);
abs_value3 = abs(value3);
// set breakpoint here
return 0;
}
我输入的值如下...
myarray[10] = "characters"
value1 = 578
value2 = -1123
value3 = 999
运行一些命令后,我得到以下输出...
x/1x myarray : 0x63
x/1c myarray : 99 'c'
x/1s myarray : "characters"
x/1d &abs_value1 : 578
x/1x &value1 : 0x00000242
x/1d &abs_value2 : 1123
x/1x &value2 : 0xfffffb9d
x/1d &abs_value3 : 999
x/1x &value3 :0x000003e7
x/1c &value1 : 66 'B'
x/1c &value2 : -99 '\235'
所以我的问题是,在不查看代码而仅使用前面的命令的情况下,我们能否确定value1,value2和value3是带符号的还是无符号的?
据我所知,我认为没有足够的信息来说明它们是否已签名。我的第一个本能是寻找负值,但是由于我们要获取变量的绝对值,因此无法仅通过查看命令来确定该值是否以负数开头。
我们可以推断出变量是带符号还是无符号的其他方法?
解决方法
我们可以推断出变量是带符号还是无符号的其他方法?
启用调试信息后,这非常容易。您可以使用ptype
命令,但应使用-g
选项构建二进制文件以使其正常工作。
(gdb) ptype value1
type = unsigned int
(gdb) ptype abs_value1
type = unsigned int
(gdb) ptype abs_value2
type = unsigned int
(gdb) ptype abs_value3
type = unsigned int
(gdb) ptype value2
type = int
(gdb) ptype value3
type = int
(gdb) ptype myarray
type = char [10]
(gdb)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。