对于C,gdb的"表达式语言"只是普通的C表达式,有一些方便的扩展用于调试.对于C++来说,这不太正确,主要是因为C++解析起来要困难得多,因此表达式语言往往是C++的一个子集加上一些gdb扩展.
所以,简短的回答是你可以输入:
(gdb) print sizeof(mystruct)
Run Code Online (Sandbox Code Playgroud)
但是,有一些警告.
首先,gdb目前的语言非常重要.你可以找到这个show language.在struct类型的情况下,在C++中有一个自动typedef,但在C中则没有.因此,如果您正在使用该auto语言(并且通常应该这样),并且在C帧中停止,则需要使用以下关键字:
(gdb) print sizeof(struct mystruct)
Run Code Online (Sandbox Code Playgroud)
现在,这仍然可能不起作用.此时通常的原因是程序中未使用该结构,因此不会显示在调试信息中.即使您认为它应该可用,也可以优化调试信息,因为它取决于编译器.例如,我认为如果a struct仅用于sizeof表达式(并且没有定义该类型的变量),那么我认为(很难记得)GCC不会为它发出DWARF.
您可以使用readelf或检查类型是否可用dwgrep,例如:
$ readelf -wi myexecutableorlibrary | grep mystruct
Run Code Online (Sandbox Code Playgroud)
(虽然在现实生活中我经常使用less然后仔细检查DWARF DIE.你需要知道一点DWARF才能理解这一点.)
有时在gdb中,使用"filename"扩展名来准确指定您所指的实体是很方便的.喜欢:
(gdb) print 'myfile.c'::variable
Run Code Online (Sandbox Code Playgroud)
不确定这是否适用于类型,无论如何它通常不是必需的.