This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/20837] New: Destructor appears twice in the stack trace


https://sourceware.org/bugzilla/show_bug.cgi?id=20837

            Bug ID: 20837
           Summary: Destructor appears twice in the stack trace
           Product: gdb
           Version: 7.6
            Status: UNCONFIRMED
          Severity: minor
          Priority: P2
         Component: c++
          Assignee: unassigned at sourceware dot org
          Reporter: jinq0123 at 163 dot com
  Target Milestone: ---

Created attachment 9645
  --> https://sourceware.org/bugzilla/attachment.cgi?id=9645&action=edit
simple test destructor

A::~A() appears twice:

    (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

Should be once.

See the attached code:

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

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

Breakpoint A::~A has 2 locations:

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

The full gdb session:

    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)

Twice if it is virtual destructor and is called by delete.

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

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]