You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用gdb Python API获取C++函数参数名时始终得到None

问题:GDB Python API提取C++函数参数名时返回None

需求背景

需要区分函数中的命名参数与匿名参数,同时保留参数传入顺序,因此info args或遍历gdb.Block这类方法不适用——它们无法包含匿名参数。

测试代码

将以下代码编译为调试版本测试:

// library.h
auto named(int a, int b) -> int;

// library.cpp
auto named(int a, int b) -> int {
  return 0;
}

GDB操作及结果

在GDB中设置断点后执行以下Python命令,发现参数的name属性始终返回None:

(gdb) python named = gdb.parse_and_eval("named")
(gdb) python print(named.type)
int (int, int)
(gdb) python print(named.type.fields())
[<gdb.Field object at 0x7f79663f29d0>, <gdb.Field object at 0x7f79663f2a10>]
(gdb) python print(named.type.fields()[0].name)
None
(gdb) python print(named.type.fields()[1].name)
None

官方文档说明

根据GDB官方文档:

函数:Type.fields ()
...

  • 函数和方法类型的每个参数对应一个字段。C++类的基类型也会表示为字段。
    ...
    每个字段都是一个gdb.Field对象,包含预定义属性:
    ...
    name
    字段的名称,匿名字段则为None。

原本期望输出参数名'a'和'b',因为在声明和定义中都显式指定了参数名,并非仅存在于原型中。

疑问

是否对gdb.Field.name存在误解?该属性是不是仅对表示C++类/结构体的gdb.Type有意义?

测试环境

使用的GDB版本:

  • 12.1(apt发布版)
  • 13.0.90.20230102(每周快照版)

内容的提问来源于stack exchange,提问作者dROOOze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:45:38