gpt4 book ai didi

c++ - 如何在gdb的调用命令中使用C++默认参数

转载 作者:行者123 更新时间:2023-11-30 04:42:14 24 4
gpt4 key购买 nike

gdb 似乎不支持 C++ default arguments使用 call 命令调用函数时:

void dbg_test(int a = 1) {
std::cout << a << std::endl;
}

gdb 说:

(gdb) call dbg_test()
Too few arguments in function call.
(gdb) call dbg_test(2)
2
(gdb)

我猜这是因为默认值是在编译时注入(inject)的,gdb 是调试器,不是编译器 ;-)

有机会在 gdb 中使用默认值吗?

编辑:或者您是否知道明确指出只有编译器知道默认值的引用?

编辑 gdb的自动补全(TAB TAB)只显示数据类型,不显示默认值:

(gdb) call dbg_test(int)

最佳答案

目前的 gdb、gcc 和 clang 版本似乎无法做到这一点。

C++ Expressions gdb手册的一部分说:

GDB expression handling can interpret most C++ expressions.
...
GDB does not perform overload resolution involving user-defined type conversions, calls to constructors, or instantiations of templates that do not exist in the program. It also cannot handle ellipsis argument lists or default arguments.

我编写了一些测试并使用 g++ 9.2.1 和 clang++ 9.0.0-2 编译了它们。在所有情况下,我都没有看到任何与默认参数值相关的 DWARF 信息。在所有情况下,评估参数默认值的代码都在调用者的代码中,而不是被调用者的代码中。因此,gdb 似乎没有可靠的方法来辨别如何评估参数的默认值。

DWARF Issue 141117.1可能表明,最终将有一个 DW_AT_default_value 属性,该属性引用一个常量或一段代码或源代码字符串,其中包含被评估为参数默认值的表达式。

关于c++ - 如何在gdb的调用命令中使用C++默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58827121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com