GDB断点相同的功能出现的次数更多

1 gdb

使用gdb,我遇到了一个奇怪的问题:有一种方法出现三次:

(gdb) b Logger::Logger
[0] cancel
[1] all
[2] Logger at src/Logger.cpp:52
[3] Logger at src/Logger.cpp:52
[4] Logger at src/Logger.cpp:52
Run Code Online (Sandbox Code Playgroud)

从所有三个实例都在文件Logger.cpp的第552行的事实来看,可以推断出它们实际上是指相同的方法.这是什么意思?Logger :: Logger构造函数是否意外地进入了二进制文件三次,或者这是一个gdb错误?

Emp*_*ian 5

最新版本的GCC(和许多其他编译器)创建了几个版本的构造函数和析构函数.

GDB中存在一个错误,它忽略了在所有版本上设置断点,导致断点永远不会触发.现在,在更正了GDB错误后,您将获得多个断点.

选择all,然后执行info break,并注意3个断点的地址都不同,实际上是不同的功能.