金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  423 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks
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


   
posted on 2016-11-18 16:19 金庆 阅读(803) 评论(0)  编辑 收藏 引用 所属分类: 1. C/C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理