使用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,000:");
scanf("%d", &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) 

最新更新