gdb不知为何显示2次析构

(金庆的专栏 2016.11)

gdb 显示2次 A::~A():

(gdb) bt
#0  A::~A (this=0x602010, __in_chrg=<optimized out>) at main.cpp:10
#1  0x0000000000400a96 in A::~A (this=0x602010, __in_chrg=<optimized out>)
    at main.cpp:12
#2  0x00000000004009c0 in main () at main.cpp:18

代码如下:

class A
{
public:
    A() {}
    virtual ~A()
    {
        cout << "~A()" << endl;
    }
};

int main()
{
    A* p = new A;
    delete p;
    return 0;
}

打断点显示:2 locations:

(gdb) b A::~A
Breakpoint 1 at 0x400a40: A::~A. (2 locations)

完整的 gdb 输出:

g++ -g main.cpp
[jinq@localhost test]$ gdb a.out
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-80.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/jinq/test/a.out...done.
(gdb) b A::~A
Breakpoint 1 at 0x400a40: A::~A. (2 locations)
(gdb) run
Starting program: /home/jinq/test/a.out

Breakpoint 1, A::~A (this=0x602010, __in_chrg=<optimized out>) at main.cpp:12
12          }
Missing separate debuginfos, use: debuginfo-install glibc-2.17-106.el7_2.8.x86_64 libgcc-4.8.5-4.el7.x86_64 libstdc++-4.8.5-4.el7.x86_64
(gdb) bt
#0  A::~A (this=0x602010, __in_chrg=<optimized out>) at main.cpp:12
#1  0x00000000004009c0 in main () at main.cpp:18
(gdb) s

Breakpoint 1, A::~A (this=0x602010, __in_chrg=<optimized out>) at main.cpp:10
10          {
(gdb) bt
#0  A::~A (this=0x602010, __in_chrg=<optimized out>) at main.cpp:10
#1  0x0000000000400a96 in A::~A (this=0x602010, __in_chrg=<optimized out>)
    at main.cpp:12
#2  0x00000000004009c0 in main () at main.cpp:18
(gdb) ^CQuit
(gdb)

虚析构函数并且是delete才这样。

Also see: http://lists.qt-project.org/pipermail/interest/2015-November/019691.html

已提交Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=20837

gdb不知为何显示2次析构的更多相关文章

  1. gdb调试3_显示变量 和 数组

    http://www.cnblogs.com/shipfi/archive/2008/08/04/1260293.html  感谢作者! 程序变量查看文件中某变量的值:file::variablefu ...

  2. GDB命令行最基本操作

    程序启动: A.冷启动 gdb program              e.g., gdb ./cs gdb –p pid                 e.g., gdb –p `pidof c ...

  3. GDB配置与.gdbinit的编写

    GDB配置与.gdbinit的编写 当 GDB(即 GNU Project Debugger)启动时,它在当前用户的主目录中寻找一个名为 .gdbinit 的文件:如果该文件存在,则 GDB 就执行该 ...

  4. GDB详解

    1 简介 2 生成调试信息 3 启动GDB 的方法 4 程序运行上下文 4.1 程序运行参数 4.2 工作目录 4.3 程序的输入输出 5 设置断点 5.1 简单断点 5.2 多文件设置断点 5.3 ...

  5. GDB调试精粹及使用实例(转)

    一:列文件清单 1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符 ...

  6. GDB教程详解

    GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC ...

  7. GDB中文手册

    用GDB调试程序GDB概述 2使用GDB 5GDB中运行UNIX的shell程序 8在GDB中运行程序 8调试已运行的程序 两种方法: 9暂停 / 恢复程序运行 9一.设置断点(BreakPoint) ...

  8. Linux高级编程--04.GDB调试程序(查看数据)

    查看栈信息 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的.当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入"栈"(Stack)中.你可以用 ...

  9. GDB调试器使用总结

    概述:GDB是linux下调试程序的神器,做为linux程序员,如果不能熟练的使用GDB进行程序调试,那将是很失败的事情.强大的功能使GDB的使用也变得比较复杂,如果是初学者肯定会比繁杂的命令吓到.下 ...

随机推荐

  1. 使用multiprocessing模块创建多进程

    # 使用multiprocessing模块创建多进程 # multiprcessing模块提供了一个Process类来描述一个进程对象. # 创建子进程时,只需要传入一个执行函数和函数的参数,即可完成 ...

  2. JSONObject和JSONArray区别及基本用法

    一.JSONObject和JSONArray的数据表示形式 JSONObject的数据是用 {  } 来表示的, 例如:   { "id" : "123", & ...

  3. Lua版组合算法

    高效率的排列组合算法--<编程珠矶>--Lua实现 原文链接 原文是python实现的,这里给出lua版本的实现 组合算法     本程序的思路是开一个数组,其下标表示1到m个数,数组元素 ...

  4. [LeetCode] Optimal Division 最优分隔

    Given a list of positive integers, the adjacent integers will perform the float division. For exampl ...

  5. [LeetCode] Diameter of Binary Tree 二叉树的直径

    Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a b ...

  6. nginx 安装及简单配置(适用 小白)

    一.nginxNginx是一个异步框架的 Web服务器,也可以用作反向代理,负载平衡器 和 HTTP缓存,Nginx可以部署在网络上使用FastCGI脚本.SCGI处理程序.WSGI应用服务器或Phu ...

  7. pyqt5 QGraphicsView颜色动画问题(不兼容,运行不了动画)

    初学动画.无敌踩坑,资料真的是太少了.....本坑是一个大坑,只有解决方法,但实质原因仍不清楚 在一篇资料中了解到我们可以通过QGraphicsView来实现动画QPropertyAnimation ...

  8. Ubuntu重装mysql错误解决

    新搭建的服务器,先在Ubuntu上安装mariadb,后来由于很多权限问题,决定安装Mysql,在卸载过程中由于未卸载干净,导致mysql重装过程中出现了很多问题. Reading package l ...

  9. 第一届“百度杯”信息安全攻防总决赛_Upload

    题目见i春秋ctf训练营 看到fast,就想抓个包看看,以前有道题是打开链接直接来了个跳转,当然这题不是 查看返回包,发现一个好东西 拿去base64解码看看 感觉给出的字符串能继续解码,果然解码后得 ...

  10. 详解vue移动端 下拉刷新

    看完这篇文章,相信大伙也一样可以,做出一个自己的刷新,加载的组件 说这个功能之前,大家要先了解一下,要怎么触发滚动条事件. 一定要注意,所有滚动事件都必须要满足这个条件,横向滚动条也一样, 只要满足子 ...