Can reproduce:
proper backtrace:
#0 0x6de58cf5 JumpTracker::OnMenuJumpBack(this=0xe8706e0) (wxPath\CB-Test\git_1\codeblocks_sf\src\plugins\contrib\BrowseTracker\JumpTracker.cpp:636)
#1 0x6a084074 wxAppConsoleBase::HandleEvent(wxEvtHandler*, void (wxEvtHandler::*)(wxEvent&) (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#2 0x6a0840d0 wxAppConsoleBase::CallEventHandler(wxEvtHandler*, wxEventFunctor&, wxEvent&) const() (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#3 0x6a1a6f8d wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#4 0x6a1a7bf8 wxEvtHandler::SearchDynamicEventTable(wxEvent&) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#5 0x6a1a742b wxEvtHandler::TryHereOnly(wxEvent&) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#6 0x6a99b70c wxEvtHandler::TryBeforeAndHere(wxEvent&) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#7 0x6a1a71ef wxEvtHandler::ProcessEvent(wxEvent&) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#8 0x6a1a7319 wxEvtHandler::DoTryChain(wxEvent&) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#9 0x6a1a727a wxEvtHandler::ProcessEventLocally(wxEvent&) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#10 0x6a1a7204 wxEvtHandler::ProcessEvent(wxEvent&) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#11 0x6a3da42a wxWindowBase::TryAfter(wxEvent&) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#12 0x6a1a722f wxEvtHandler::ProcessEvent(wxEvent&) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#13 0x6a1a7534 wxEvtHandler::SafelyProcessEvent(wxEvent&) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#14 0x6a3d3c7e wxWindowBase::HandleWindowEvent(wxEvent&) const() (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#15 0x6a3bf2af wxToolBarBase::OnLeftClick(int, bool) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#16 0x6a2c3840 wxToolBar::MSWCommand(unsigned int, unsigned short) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#17 0x6a24cb8c wxWindow::HandleCommand(unsigned short, unsigned short, HWND__*) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#18 0x6a27f713 wxFrame::HandleCommand(unsigned short, unsigned short, HWND__*) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#19 0x6a27f84a wxFrame::MSWWindowProc(unsigned int, unsigned int, long) () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#20 0x6a24417f wxWndProc(HWND__*, unsigned int, unsigned int, long)@16() (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#21 0x76a162fa gapfnScSendMessage() (C:\Windows\syswow64\user32.dll:??)
#22 0x30c74 ?? () (??:??)
#23 0x76a16d3a USER32!GetThreadDesktop() (C:\Windows\syswow64\user32.dll:??)
#24 0x6a2440d6 wxWindowCreationHook::~wxWindowCreationHook() () (wxPath\wxWidgets-3.0.4\lib\gcc_dll\wxmsw30u_gcc_custom.dll:??)
#25 0x76a1965e USER32!GetWindow() (C:\Windows\syswow64\user32.dll:??)
#26 ?? ?? () (??:??)
culprit:
void JumpTracker::OnMenuJumpBack(wxCommandEvent &/*event*/)
// ----------------------------------------------------------------------------
{
#if defined(LOGGING)
LOGIT( _T("JT [%s]"), _T("OnMenuJumpBack"));
#endif
int knt = m_ArrayOfJumpData.GetCount();
if (0 == knt)
return;
// If not wrapping && we're about to backup into the insert index, return
if (not m_bWrapJumpEntries)
if (GetPreviousIndex(m_cursor) == m_insertNext)
return;
m_bJumpInProgress = true;
EditorManager* edmgr = Manager::Get()->GetEditorManager();
EditorBase* eb = edmgr->GetActiveEditor();
cbEditor* cbed = edmgr->GetBuiltinEditor(eb);
//-long activeEdLine = 0;
long activeEdPosn = 0;
wxString activeEdFilename = wxEmptyString;
if (cbed)
{
//-activeEdLine = cbed->GetControl()->GetCurrentLine();
activeEdPosn = cbed->GetControl()->GetCurrentPos();
activeEdFilename = cbed->GetFilename();
}
// if active editor line == m_cursor, back up the m_cursor
// until finding an entry that does not match this m_cursor entry.
// else
// find the previous m_insertNext entry that does not match this editor or line number
do { // find the previous appropriate jump position
// if current cursor position is also current editor and line,
// return the previous m_cursor entry
if ( JumpDataContains(m_cursor, cbed->GetFilename(), activeEdPosn))
{
// FIXME (ph#): a dead editor can be returned here
m_cursor = GetPreviousIndex(m_cursor);
}
else //find an entry (backward) from the insertion point
{
is 0 and there is no null pointer check