我想,这种情况很正常。某些 ABI 将为一个类生成两个构造函数。当你问b X::X
gdb 将检测两个构造函数并设置两个断点。 (抱歉,这不是你的情况)
“设置了多个断点。”对于重载方法也可能会发出警告(这是您的情况):http://www.delorie.com/gnu/docs/gdb/gdb_36.html http://www.delorie.com/gnu/docs/gdb/gdb_36.html
一些编程语言(特别是 C++)允许多次定义单个函数名称,以便在不同的上下文中应用。这称为超载。当函数名重载时,“break function”不足以告诉 GDB 您想要在哪里设置断点。
对于此类方法,您可以通过键入其类型来选择一种方法:
中断函数(类型)
更新:根据同一文档,gdb 应该要求用户选择一些重载方法:
GDB 为您提供了一个针对不同可能断点的编号选项菜单,并根据提示等待您的选择>'. The first two options are always
[0] 取消”和“[1] 全部”。键入 1 会在函数的每个定义处设置一个断点,键入 0 会中止中断命令,而不设置任何新断点。
例如,以下会话摘录显示了在重载符号 String::after 处设置断点的尝试。我们选择该函数名称的三个特定定义:
(gdb) b String::after
[0] cancel
[1] all
[2] file:String.cc; line number:867
[3] file:String.cc; line number:860
[4] file:String.cc; line number:875
[5] file:String.cc; line number:853
[6] file:String.cc; line number:846
[7] file:String.cc; line number:735
> 2 4 6
Breakpoint 1 at 0xb26c: file String.cc, line 867.
Breakpoint 2 at 0xb344: file String.cc, line 875.
Breakpoint 3 at 0xafcc: file String.cc, line 846.
Multiple breakpoints were set.
Use the "delete" command to delete unwanted
breakpoints.
(gdb)
更新1:http://sourceware.org/gdb/onlinedocs/gdb/Ambigously-Expressions.html#Ambigously-Expressions http://sourceware.org/gdb/onlinedocs/gdb/Ambiguous-Expressions.html#Ambiguous-Expressions表示该菜单可以打开和关闭(默认为关闭):
设置多个符号mode
当表达式不明确时,此选项允许您调整调试器行为。
默认情况下,模式设置为all。如果使用表达式的命令允许多个选择,则 gdb 会自动选择所有可能的选择。
当模式设置为ask,当检测到歧义时,调试器始终使用菜单。
最后,当模式设置为cancel,调试器由于不明确而报告错误,并且命令被中止。