Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GDB判断变量是有符号的还是无符号的_Gdb_Unsigned_Signed - Fatal编程技术网

使用GDB判断变量是有符号的还是无符号的

使用GDB判断变量是有符号的还是无符号的,gdb,unsigned,signed,Gdb,Unsigned,Signed,所以我对使用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:");

所以我对使用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;
}
在运行了一些命令之后,我得到了以下输出

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) 

对不起,我应该说得更具体些。我的意思是询问是否有不同的方法来推断变量是有符号的还是无符号的,只使用我使用的命令。我个人认为除了检查负值之外,没有其他方法,但这种方法失败了,因为我们取的是绝对值。
(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)