gdb:Cast取决于编译的语言

gdb:Cast取决于编译的语言,gdb,Gdb,我正在调试一个使用GDB(arm ONE eabi GDB)在Rust中编译的程序。有一次,我想写一个内存地址,如下所示: (gdb) set *((int *) 0x24040000) = 0x0000CAFE syntax error in expression, near `) 0x24040000) = 0x0000CAFE'. set *(0x24040000 as *mut i32) = 0x0000CAFE 经过多次尝试后,我发现我正在铸造C样式,我必须按照如下方式铸造生锈样式

我正在调试一个使用GDB(arm ONE eabi GDB)在Rust中编译的程序。有一次,我想写一个内存地址,如下所示:

(gdb) set *((int *) 0x24040000) = 0x0000CAFE
syntax error in expression, near `) 0x24040000) = 0x0000CAFE'.
set *(0x24040000 as *mut i32) = 0x0000CAFE
经过多次尝试后,我发现我正在铸造C样式,我必须按照如下方式铸造生锈样式:

(gdb) set *((int *) 0x24040000) = 0x0000CAFE
syntax error in expression, near `) 0x24040000) = 0x0000CAFE'.
set *(0x24040000 as *mut i32) = 0x0000CAFE

我的问题是GDB如何解释不同的命令,以及为什么我会出现这个错误。这是因为符号(int)无法识别,但在这种情况下,gdb如何加载符号?gdb是否需要将指令编译为目标上运行的二进制文件的正确语言?

是的,它取决于语言,并且语言是从加载的源文件的文件名推导出来的


引述:

print
和许多其他GDB命令接受表达式并计算其值您使用的编程语言定义的任何类型的常量、变量或运算符在GDB的表达式中都是有效的。这包括条件表达式、函数调用、强制转换和字符串常量

:

如果您不想查看赋值的值,请使用
set
命令而不是
print
命令
实际上与
打印
相同,只是表达式的值未打印且未放入值历史记录中
(请参见值历史记录)。表达式仅针对其效果进行计算

:

对于某些语言,特定于语言的信息内置于GDB中,允许您用程序的本机语言表达上述操作,并允许GDB以与程序的本机语言语法一致的方式输出值用于构建表达式的语言称为工作语言。

:

有两种方法可以控制工作语言,要么让GDB自动设置,要么自己手动选择。您可以将“设置语言”命令用于任何用途。启动时,GDB默认自动设置语言

[..]大多数情况下,GDB从文件名推断语言。