Developer forums (C::B DEVELOPMENT STRICTLY!) > Development

debugger stop button on Linux console pgm crashes CB

(1/4) > >>

Pecan:
When debugging a linux console program, and I hit the red stop button, CB crashes as follows:


--- Code: ---Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1230633296 (LWP 2568)]
0xb46a4fe4 in DebuggerDriver::CurrentCommand (this=0x8cde9e8)
    at plugins/debuggergdb/debuggerdriver.cpp:98
98          return m_DCmds.GetCount() ? m_DCmds[0] : 0;
(gdb) bt
#0  0xb46a4fe4 in DebuggerDriver::CurrentCommand (this=0x8cde9e8)
    at plugins/debuggergdb/debuggerdriver.cpp:98
#1  0xb46caa31 in GDB_driver::ParseOutput (this=0x8cde9e8, output=@0xbfc9063c)
    at /home/pecan/devel/trunk/src/plugins/debuggergdb/gdb_driver.cpp:620
#2  0xb46a8811 in DebuggerGDB::ParseOutput (this=0x8a17b90, output=@0xbfc9063c)
    at plugins/debuggergdb/debuggergdb.cpp:1543
#3  0xb46aac39 in DebuggerGDB::OnGDBOutput (this=0x8a17b90, event=@0x8a2ae40)
    at plugins/debuggergdb/debuggergdb.cpp:1916
#4  0xb7991655 in wxAppConsole::HandleEvent ()
   from /usr/lib/libwx_baseu-2.6.so.0
#5  0xb7a20b52 in wxEvtHandler::ProcessEventIfMatches ()
   from /usr/lib/libwx_baseu-2.6.so.0
#6  0xb7a20c9d in wxEventHashTable::HandleEvent ()
   from /usr/lib/libwx_baseu-2.6.so.0
#7  0xb7a20e1f in wxEvtHandler::ProcessEvent ()
   from /usr/lib/libwx_baseu-2.6.so.0
#8  0xb7a212d0 in wxEvtHandler::ProcessPendingEvents ()
   from /usr/lib/libwx_baseu-2.6.so.0
#9  0xb7991bef in wxAppConsole::ProcessPendingEvents ()
   from /usr/lib/libwx_baseu-2.6.so.0
#10 0xb776e4dd in Manager::ProcessPendingEvents () at sdk/manager.cpp:108
#11 0xb782d4cf in SimpleTextLog::AddLog (this=0x8b25b58, msg=@0xbfc909cc,
    addNewLine=true) at sdk/simpletextlog.cpp:70
---Type <return> to continue, or q <return> to quit---q
Quit
(gdb) f
#0  0xb46a4fe4 in DebuggerDriver::CurrentCommand (this=0x8cde9e8)
    at plugins/debuggergdb/debuggerdriver.cpp:98
98          return m_DCmds.GetCount() ? m_DCmds[0] : 0;
(gdb) p m_DCmds
$16 = {<wxBaseArrayPtrVoid> = {m_nSize = 21, m_nCount = 22,
    m_pItems = 0x17}, <No data fields>}
(gdb) Quit
(gdb)


--- End code ---

artoj:
Most likely this one: Bug #10077 DebuggerDriver crashes CB <<- Stop Debugger, close App

I also got a backtrace (the one in my comment).

Pecan:

--- Quote from: artoj on February 06, 2007, 07:18:53 pm ---Most likely this one: Bug #10077 DebuggerDriver crashes CB <<- Stop Debugger, close App

I also got a backtrace (the one in my comment).

--- End quote ---

Thanks, I'll add my backtrace to it and so something about it as soon as I get the Linux console patch in.

Pecan:
While I was trying to chase the stop button crash down, I got another type of crash.
Note that m_Cursor has an invalid address. (So did m_DCmds)

--- Code: ---(gdb) p m_DCmds
$16 = {<wxBaseArrayPtrVoid> = {m_nSize = 21, m_nCount = 22,
    m_pItems = 0x17}, <No data fields>}
(gdb) Quit
(gdb)

--- End code ---
Both crashes are symptomatic in that these are class variables, not heap, and they both reside in debuggerdriver.h

I dont understand how they could be invalid since debuggerdriver doesn't appear to be a dynamic class. At least I haven't found a "new debuggerdriver(...)" statement yet.



--- Code: ---// third type of crash
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1231137104 (LWP 1536)]
0xb796b144 in wxStringBase::operator= () from /usr/lib/libwx_baseu-2.6.so.0
(gdb) bt
#0  0xb796b144 in wxStringBase::operator= () from /usr/lib/libwx_baseu-2.6.so.0
#1  0x08073dda in wxString::operator= (this=0x8fc8cf8)
    at /usr/include/wx-2.6/wx/string.h:611
#2  0xb464e9f5 in GDB_driver::HandleMainBreakPoint (this=0x8fc8cd0,
    reBreak=@0xb467f998, line=@0xbfa8846c)
    at /home/pecan/devel/trunk/src/plugins/debuggergdb/gdb_driver.cpp:885
#3  0xb4650a28 in GDB_driver::ParseOutput (this=0x8fc8cd0, output=@0xbfa8850c)
    at /home/pecan/devel/trunk/src/plugins/debuggergdb/gdb_driver.cpp:811
#4  0xb462d84d in DebuggerGDB::ParseOutput (this=0x89da6f8, output=@0xbfa8850c)
    at plugins/debuggergdb/debuggergdb.cpp:1543
#5  0xb462fc75 in DebuggerGDB::OnGDBOutput (this=0x89da6f8, event=@0x89eb74c)
    at plugins/debuggergdb/debuggergdb.cpp:1916
#6  0xb7916655 in wxAppConsole::HandleEvent ()
   from /usr/lib/libwx_baseu-2.6.so.0
#7  0xb79a5b52 in wxEvtHandler::ProcessEventIfMatches ()
   from /usr/lib/libwx_baseu-2.6.so.0
#8  0xb79a5c9d in wxEventHashTable::HandleEvent ()
   from /usr/lib/libwx_baseu-2.6.so.0
#9  0xb79a5e1f in wxEvtHandler::ProcessEvent ()
   from /usr/lib/libwx_baseu-2.6.so.0
#10 0xb79a62d0 in wxEvtHandler::ProcessPendingEvents ()
   from /usr/lib/libwx_baseu-2.6.so.0
#11 0xb7916bef in wxAppConsole::ProcessPendingEvents ()
---Type <return> to continue, or q <return> to quit---q
 from /usr/lib/libwx_baseQuit
(gdb) f 2
#2  0xb464e9f5 in GDB_driver::HandleMainBreakPoint (this=0x8fc8cd0,
    reBreak=@0xb467f998, line=@0xbfa8846c)
    at /home/pecan/devel/trunk/src/plugins/debuggergdb/gdb_driver.cpp:885
885                     m_Cursor.file = reBreak.GetMatch( line, 1);
(gdb) p line
$1 = (wxString &) @0xbfa8846c: {<wxStringBase> = {static npos = 4294967295,
    m_pchData = 0x902ea0c}, <No data fields>}
(gdb) x/s10 line.m_pchData
A syntax error in expression, near `line.m_pchData'.
(gdb) x/10s  line.m_pchData
0x902ea0c:       "\032"
0x902ea0e:       ""
0x902ea0f:       ""
0x902ea10:       "\032"
0x902ea12:       ""
0x902ea13:       ""
0x902ea14:       "/"
0x902ea16:       ""
0x902ea17:       ""
0x902ea18:       "h"
(gdb) x/20s  line.m_pchData
0x902ea0c:       "\032"
0x902ea0e:       ""
0x902ea0f:       ""
0x902ea10:       "\032"
0x902ea12:       ""
0x902ea13:       ""
0x902ea14:       "/"
0x902ea16:       ""
0x902ea17:       ""
0x902ea18:       "h"
0x902ea1a:       ""
0x902ea1b:       ""
0x902ea1c:       "o"
0x902ea1e:       ""
0x902ea1f:       ""
0x902ea20:       "m"
0x902ea22:       ""
0x902ea23:       ""
0x902ea24:       "e"
0x902ea26:       ""
(gdb) x/20c  line.m_pchData
0x902ea0c:      26 '\032'       0 '\0'  0 '\0'  0 '\0'  26 '\032'       0 '\0' 0 '\0'   0 '\0'
0x902ea14:      47 '/'  0 '\0'  0 '\0'  0 '\0'  104 'h' 0 '\0'  0 '\0'  0 '\0'
0x902ea1c:      111 'o' 0 '\0'  0 '\0'  0 '\0'
(gdb) f
#2  0xb464e9f5 in GDB_driver::HandleMainBreakPoint (this=0x8fc8cd0,
    reBreak=@0xb467f998, line=@0xbfa8846c)
    at /home/pecan/devel/trunk/src/plugins/debuggergdb/gdb_driver.cpp:885
885                     m_Cursor.file = reBreak.GetMatch( line, 1);
(gdb) p m_Cursor
$2 = {file = {<wxStringBase> = {static npos = 4294967295,
      m_pchData = 0x75}, <No data fields>}, address = {<wxStringBase> = {
      static npos = 4294967295, m_pchData = 0x67}, <No data fields>},
  function = {<wxStringBase> = {static npos = 4294967295,
      m_pchData = 0x67}, <No data fields>}, line = 105, changed = 110}
(gdb)

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1231137104 (LWP 1536)]
0xb796b144 in wxStringBase::operator= () from /usr/lib/libwx_baseu-2.6.so.0
(gdb) bt
#0  0xb796b144 in wxStringBase::operator= () from /usr/lib/libwx_baseu-2.6.so.0
#1  0x08073dda in wxString::operator= (this=0x8fc8cf8)
    at /usr/include/wx-2.6/wx/string.h:611
#2  0xb464e9f5 in GDB_driver::HandleMainBreakPoint (this=0x8fc8cd0,
    reBreak=@0xb467f998, line=@0xbfa8846c)
    at /home/pecan/devel/trunk/src/plugins/debuggergdb/gdb_driver.cpp:885
#3  0xb4650a28 in GDB_driver::ParseOutput (this=0x8fc8cd0, output=@0xbfa8850c)
    at /home/pecan/devel/trunk/src/plugins/debuggergdb/gdb_driver.cpp:811
#4  0xb462d84d in DebuggerGDB::ParseOutput (this=0x89da6f8, output=@0xbfa8850c)
    at plugins/debuggergdb/debuggergdb.cpp:1543
#5  0xb462fc75 in DebuggerGDB::OnGDBOutput (this=0x89da6f8, event=@0x89eb74c)
    at plugins/debuggergdb/debuggergdb.cpp:1916
#6  0xb7916655 in wxAppConsole::HandleEvent ()
   from /usr/lib/libwx_baseu-2.6.so.0
#7  0xb79a5b52 in wxEvtHandler::ProcessEventIfMatches ()
   from /usr/lib/libwx_baseu-2.6.so.0
#8  0xb79a5c9d in wxEventHashTable::HandleEvent ()
   from /usr/lib/libwx_baseu-2.6.so.0
#9  0xb79a5e1f in wxEvtHandler::ProcessEvent ()
   from /usr/lib/libwx_baseu-2.6.so.0
#10 0xb79a62d0 in wxEvtHandler::ProcessPendingEvents ()
   from /usr/lib/libwx_baseu-2.6.so.0
#11 0xb7916bef in wxAppConsole::ProcessPendingEvents ()
---Type <return> to continue, or q <return> to quit---q
 from /usr/lib/libwx_baseQuit
(gdb) f 2
#2  0xb464e9f5 in GDB_driver::HandleMainBreakPoint (this=0x8fc8cd0,
    reBreak=@0xb467f998, line=@0xbfa8846c)
    at /home/pecan/devel/trunk/src/plugins/debuggergdb/gdb_driver.cpp:885
885                     m_Cursor.file = reBreak.GetMatch( line, 1);
(gdb) p line
$1 = (wxString &) @0xbfa8846c: {<wxStringBase> = {static npos = 4294967295,
    m_pchData = 0x902ea0c}, <No data fields>}
(gdb) x/s10 line.m_pchData
A syntax error in expression, near `line.m_pchData'.
(gdb) x/10s  line.m_pchData
0x902ea0c:       "\032"
0x902ea0e:       ""
0x902ea0f:       ""
0x902ea10:       "\032"
0x902ea12:       ""
0x902ea13:       ""
0x902ea14:       "/"
0x902ea16:       ""
0x902ea17:       ""
0x902ea18:       "h"
(gdb) x/20s  line.m_pchData
0x902ea0c:       "\032"
0x902ea0e:       ""
0x902ea0f:       ""
0x902ea10:       "\032"
0x902ea12:       ""
0x902ea13:       ""
0x902ea14:       "/"
0x902ea16:       ""
0x902ea17:       ""
0x902ea18:       "h"
0x902ea1a:       ""
0x902ea1b:       ""
0x902ea1c:       "o"
0x902ea1e:       ""
0x902ea1f:       ""
0x902ea20:       "m"
0x902ea22:       ""
0x902ea23:       ""
0x902ea24:       "e"
0x902ea26:       ""
(gdb) x/20c  line.m_pchData
0x902ea0c:      26 '\032'       0 '\0'  0 '\0'  0 '\0'  26 '\032'       0 '\0' 0 '\0'   0 '\0'
0x902ea14:      47 '/'  0 '\0'  0 '\0'  0 '\0'  104 'h' 0 '\0'  0 '\0'  0 '\0'
0x902ea1c:      111 'o' 0 '\0'  0 '\0'  0 '\0'
(gdb) f
#2  0xb464e9f5 in GDB_driver::HandleMainBreakPoint (this=0x8fc8cd0,
    reBreak=@0xb467f998, line=@0xbfa8846c)
    at /home/pecan/devel/trunk/src/plugins/debuggergdb/gdb_driver.cpp:885
885                     m_Cursor.file = reBreak.GetMatch( line, 1);
(gdb) p m_Cursor
$2 = {file = {<wxStringBase> = {static npos = 4294967295,
      m_pchData = 0x75}, <No data fields>}, address = {<wxStringBase> = {
      static npos = 4294967295, m_pchData = 0x67}, <No data fields>},
  function = {<wxStringBase> = {static npos = 4294967295,
      m_pchData = 0x67}, <No data fields>}, line = 105, changed = 110}
(gdb)

(gdb) p m_Cursor.file
$3 = {<wxStringBase> = {static npos = 4294967295,
    m_pchData = 0x75}, <No data fields>}
(gdb) Quit
(gdb)



--- End code ---

Edit: Looks like both got to GDB_driver::ParseOutput by way of
DebuggerGDB::ParseOutput which depends on m_State.GetDrive()


--- Code: ---void DebuggerGDB::ParseOutput(const wxString& output)
{
    if (m_State.HasDriver())
    {
        m_State.GetDriver()->ParseOutput(output);
    }
}


--- End code ---

My guess is that somehow, GetDriver is returning an incorrect addr.


Pecan:
Looks like m_State.m_pDriver is 0x0 when ParseOutput is called.


--- Code: ---Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1230625104 (LWP 2242)]
0xb46a7020 in DebuggerDriver::CurrentCommand (this=0x914f728)
    at plugins/debuggergdb/debuggerdriver.cpp:98
98          return m_DCmds.GetCount() ? m_DCmds[0] : 0;
(gdb) bt
#0  0xb46a7020 in DebuggerDriver::CurrentCommand (this=0x914f728)
    at plugins/debuggergdb/debuggerdriver.cpp:98
#1  0xb46ccb07 in GDB_driver::ParseOutput (this=0x914f728, output=@0xbfcdc3cc)
    at /home/pecan/devel/trunk/src/plugins/debuggergdb/gdb_driver.cpp:620
#2  0xb46aa84d in DebuggerGDB::ParseOutput (this=0x8a17bc8, output=@0xbfcdc3cc)
    at plugins/debuggergdb/debuggergdb.cpp:1543
#3  0xb46acc75 in DebuggerGDB::OnGDBOutput (this=0x8a17bc8, event=@0xb3c005c4)
    at plugins/debuggergdb/debuggergdb.cpp:1916
#4  0xb7993655 in wxAppConsole::HandleEvent ()
   from /usr/lib/libwx_baseu-2.6.so.0
#5  0xb7a22b52 in wxEvtHandler::ProcessEventIfMatches ()
   from /usr/lib/libwx_baseu-2.6.so.0
#6  0xb7a22c9d in wxEventHashTable::HandleEvent ()
   from /usr/lib/libwx_baseu-2.6.so.0
#7  0xb7a22e1f in wxEvtHandler::ProcessEvent ()
   from /usr/lib/libwx_baseu-2.6.so.0
#8  0xb7a232d0 in wxEvtHandler::ProcessPendingEvents ()
   from /usr/lib/libwx_baseu-2.6.so.0
#9  0xb7993bef in wxAppConsole::ProcessPendingEvents ()
   from /usr/lib/libwx_baseu-2.6.so.0
#10 0xb77704dd in Manager::ProcessPendingEvents () at sdk/manager.cpp:108
#11 0xb782f4cf in SimpleTextLog::AddLog (this=0x8b24788, msg=@0xbfcdc75c,
    addNewLine=true) at sdk/simpletextlog.cpp:70
#12 0xb7775001 in MessageManager::Log (this=0x860acc0, id=6, msg=@0xbfcdc75c)
    at sdk/messagemanager.cpp:455
#13 0xb46a7f8a in DebuggerGDB::DebugLog (this=0x8a17bc8, msg=@0xbfcdc75c)
    at plugins/debuggergdb/debuggergdb.cpp:566
#14 0xb46ccac9 in GDB_driver::ParseOutput (this=0x914f728, output=@0xbfcdc75c)
    at /home/pecan/devel/trunk/src/plugins/debuggergdb/gdb_driver.cpp:613
#15 0xb46aa84d in DebuggerGDB::ParseOutput (this=0x8a17bc8, output=@0xbfcdc75c)
    at plugins/debuggergdb/debuggergdb.cpp:1543
#16 0xb46acc75 in DebuggerGDB::OnGDBOutput (this=0x8a17bc8, event=@0xb3c00474)
    at plugins/debuggergdb/debuggergdb.cpp:1916
#17 0xb7993655 in wxAppConsole::HandleEvent ()
   from /usr/lib/libwx_baseu-2.6.so.0
#18 0xb7a22b52 in wxEvtHandler::ProcessEventIfMatches ()
   from /usr/lib/libwx_baseu-2.6.so.0
#19 0xb7a22c9d in wxEventHashTable::HandleEvent ()
   from /usr/lib/libwx_baseu-2.6.so.0
#20 0xb7a22e1f in wxEvtHandler::ProcessEvent ()
---Type <return> to continue, or q <return> to quit---q
 from /usr/lib/libwx_baseu-2.6.soQuit
(gdb) f
#0  0xb46a7020 in DebuggerDriver::CurrentCommand (this=0x914f728)
    at plugins/debuggergdb/debuggerdriver.cpp:98
98          return m_DCmds.GetCount() ? m_DCmds[0] : 0;
(gdb) p m_DCmds
$1 = {<wxBaseArrayPtrVoid> = {m_nSize = 16, m_nCount = 1,
    m_pItems = 0x0}, <No data fields>}
(gdb) p m_DCmds[0]
$2 = (_wxArrayDebuggerCommands &) @0x0: Cannot access memory at address 0x0
(gdb) f 2
#2  0xb46aa84d in DebuggerGDB::ParseOutput (this=0x8a17bc8, output=@0xbfcdc3cc)
    at plugins/debuggergdb/debuggergdb.cpp:1543
1543            m_State.GetDriver()->ParseOutput(output);
(gdb) f
#2  0xb46aa84d in DebuggerGDB::ParseOutput (this=0x8a17bc8, output=@0xbfcdc3cc)
    at plugins/debuggergdb/debuggergdb.cpp:1543
1543            m_State.GetDriver()->ParseOutput(output);
(gdb) p m_State
$3 = {m_pPlugin = 0x8a17bc8, [b]m_pDriver = 0x0,[/b]
  m_Watches = {<wxArrayPtrVoid> = {<wxBaseArrayPtrVoid> = {m_nSize = 0,
        m_nCount = 0, m_pItems = 0x0}, <No data fields>}, <No data fields>},
  m_Breakpoints = {<wxBaseArrayPtrVoid> = {m_nSize = 0, m_nCount = 0,
      m_pItems = 0x0}, <No data fields>}, m_BpAutoIndex = 0}
(gdb) p output
$4 = (const wxString &) @0xbfcdc3cc: {<wxStringBase> = {
    static npos = 4294967295, m_pchData = 0x903b844}, <No data fields>}
(gdb)



--- End code ---

Even tho stop has already occured, and m_State is cleared, DebuggerGDB::OnGDBOutput is trying to parse the message:
"Error detected on stdin".

We either have to drain stdin before destroying m_State, or disconnect it somehow.


--- Code: ---(gdb) f 6
#6  0xb46bdc75 in DebuggerGDB::OnGDBOutput (this=0x8a17918, event=@0x8a29a74)
    at /home/pecan/devel/trunk/src/plugins/debuggergdb/debuggergdb.cpp:1916
1916            ParseOutput(msg);
(gdb) l
1911    {
1912        wxString msg = event.GetString();
1913        if (!msg.IsEmpty())
1914        {
1915    //        Manager::Get()->GetMessageManager()->Log(m_PageIndex, _T("O>>> %s"), msg.c_str());
1916            ParseOutput(msg);
1917        }
1918    }
1919
1920    void DebuggerGDB::OnGDBError(wxCommandEvent& event)
(gdb) p msg
$7 = {<wxStringBase> = {static npos = 4294967295,
    m_pchData = 0x90baa14}, <No data fields>}

(gdb) x/80s msg.m_pchData
0x90baa14:       "e"
0x90baa16:       ""
0x90baa17:       ""
0x90baa18:       "r"
0x90baa1a:       ""
0x90baa1b:       ""
0x90baa1c:       "r"
0x90baa1e:       ""
0x90baa1f:       ""
0x90baa20:       "o"
0x90baa22:       ""
0x90baa23:       ""
0x90baa24:       "r"
0x90baa26:       ""
0x90baa27:       ""
0x90baa28:       " "
0x90baa2a:       ""
0x90baa2b:       ""
0x90baa2c:       "d"
0x90baa2e:       ""
0x90baa2f:       ""
0x90baa30:       "e"
0x90baa32:       ""
0x90baa33:       ""
0x90baa34:       "t"
0x90baa36:       ""
0x90baa37:       ""
0x90baa38:       "e"
0x90baa3a:       ""
0x90baa3b:       ""
0x90baa3c:       "c"
0x90baa3e:       ""
0x90baa3f:       ""
0x90baa40:       "t"
0x90baa42:       ""
0x90baa43:       ""
0x90baa44:       "e"
0x90baa46:       ""
0x90baa47:       ""
0x90baa48:       "d"
---Type <return> to continue, or q <return> to quit---
0x90baa4a:       ""
0x90baa4b:       ""
0x90baa4c:       " "
0x90baa4e:       ""
0x90baa4f:       ""
0x90baa50:       "o"
0x90baa52:       ""
0x90baa53:       ""
0x90baa54:       "n"
0x90baa56:       ""
0x90baa57:       ""
0x90baa58:       " "
0x90baa5a:       ""
0x90baa5b:       ""
0x90baa5c:       "s"
0x90baa5e:       ""
0x90baa5f:       ""
0x90baa60:       "t"
0x90baa62:       ""
0x90baa63:       ""
0x90baa64:       "d"
0x90baa66:       ""
0x90baa67:       ""
0x90baa68:       "i"
0x90baa6a:       ""
0x90baa6b:       ""
0x90baa6c:       "n"
0x90baa6e:       ""
0x90baa6f:       ""
0x90baa70:       ""
0x90baa71:       ""
0x90baa72:       ""
0x90baa73:       ""
0x90baa74:       ""
0x90baa75:       ""
0x90baa76:       ""
0x90baa77:       ""
0x90baa78:       ""
0x90baa79:       ""
0x90baa7a:       ""
(

--- End code ---

Navigation

[0] Message Index

[#] Next page

Go to full version