Developer forums (C::B DEVELOPMENT STRICTLY!) > Development
debugger stop button on Linux console pgm crashes CB
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