C++ GDB:警告:在重载方法上设置了多个断点

C++ GDB:警告:在重载方法上设置了多个断点,c++,gdb,breakpoints,C++,Gdb,Breakpoints,设置断点的方法是什么 在默认构造函数上,例如 GDB不会创建不必要的断点 在超负荷的情况下 还是它期望的GDB存在问题 用户要删除它的混乱吗? 还是我漏掉了一点 编辑1。 对于以下代码: anisha@linux-dopx:~> g++ -Wall -pedantic breakpoints.cpp -g anisha@linux-dopx:~> gdb a.out (gdb) b X::X Breakpoint 1 at 0x400ac1: file breakpoints.cpp

设置断点的方法是什么 在默认构造函数上,例如 GDB不会创建不必要的断点 在超负荷的情况下

还是它期望的GDB存在问题 用户要删除它的混乱吗? 还是我漏掉了一点

编辑1。

对于以下代码:

anisha@linux-dopx:~> g++ -Wall -pedantic breakpoints.cpp -g
anisha@linux-dopx:~> gdb a.out
(gdb) b X::X
Breakpoint 1 at 0x400ac1: file breakpoints.cpp, line 14.
Breakpoint 2 at 0x400aa0: file breakpoints.cpp, line 9.
warning: Multiple breakpoints were set.
Use the "delete" command to delete unwanted breakpoints.
(gdb)

我认为,这种情况是正常的。一些ABI将为一个类生成两个构造函数。当您询问
bx::X
gdb时,它将检测两个构造函数并设置两个断点。(对不起,这不是你的情况)

“设置了多个断点”。对于重载方法也可能会发出警告(这是您的情况):

一些编程语言(特别是C++)允许在不同的上下文中多次定义单个函数名。这称为重载。当函数名重载时,“break function”不足以告诉GDB您想要断点的位置

对于此类方法,您可以通过键入其类型来选择一种方法:

中断功能(类型)

更新:根据同一文档,gdb应该要求用户选择一些重载方法:

GDB为您提供了一个针对不同可能断点的编号选项菜单,并在提示下等待您的选择。前两个选项总是[0]取消”和“[1]全部”。键入1在函数的每个定义处设置一个断点,键入0将中止break命令,而不设置任何新的断点

例如,下面的会话摘录显示了在重载符号字符串::after处设置断点的尝试。我们选择该函数名的三个特定定义:

更新1:表示此菜单可以打开和关闭(默认为关闭):

设置多个符号模式

此选项允许您在表达式不明确时调整调试器行为。 默认情况下,模式设置为all。如果使用表达式的命令允许多个选择,那么gdb会自动选择所有可能的选择

当mode设置为ask时,当检测到歧义时,调试器始终使用菜单

最后,当模式设置为“取消”时,调试器会报告由于不明确而导致的错误,命令将中止


什么CPU有linux dopx?@osgx不明白您想要什么信息。linux dopx是基于x86还是x86_64 CPU?还是手臂?好:)
anisha@linux-dopx:~>uname-a Linux Linux dopx 2.6.34-12-desktop#1 SMP PREEMPT 2010-06-29 02:39:08+0200 x86_64 x86_64 x86_64 GNU/Linux
在10个重载函数上设置10个断点是没有意义的,此时只需要1个断点,然后期望用户删除混乱,这就是我问这个问题的原因。这里的问题是GDB如何知道用户想要什么。有些用户希望将断点设置为所有重载版本,有些用户只希望将断点设置为某些版本。若用户给出了不明确的表达式(函数名不带参数),gdb将为所有版本设置断点(但是,请参阅Update1,gdb可能会询问您该怎么做)。若用户给出带有参数的函数名,gdb将只设置一个断点。GDB只是尽最大努力取消对用户的请求。不是一个数字,而是一个类型。例如:
bx::X()
bx::X(int)
是的,这很有效,谢谢。我将把输出放在第一篇文章中。
class X
{
    public:
        X   () 
        {
            std :: cout << "\nIn the default constructor";
        }

        X   (int) 
        {
            std :: cout << "\nIn the parameterized constructor";
        }

        ~X () {}
};
(gdb) b X:: X (11)
the class X does not have any method named X (11)
Hint: try 'X:: X (11)<TAB> or 'X:: X (11)<ESC-?>
(Note leading single quote.)
Make breakpoint pending on future shared library load? (y or [n]) 
(gdb) b X::X(int)
Breakpoint 5 at 0x400ac1: file breakpoints.cpp, line 14.
(gdb) b X::X()
Breakpoint 6 at 0x400aa0: file breakpoints.cpp, line 9.
(gdb) 
(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)