Author Topic: error alert message when using ThreadSearch Plugin  (Read 15656 times)

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5910
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
error alert message when using ThreadSearch Plugin
« on: July 30, 2022, 10:25:00 am »
When search by thread search plugin, I got a alert message, and I press the "Yes", C::B crashes. (If I press "Cancel", C::B can continue to run)


Code
codeblocks.exe caused a Breakpoint at location 000007FEDC0902D7 in module wxmsw317u_gcc_cb.dll.

AddrPC           Params
000007FEDC0902D7 00000000070A761E 00000000070A75A0 000000000D63EB40  wxmsw317u_gcc_cb.dll!wxUniChar::ToHi8bit
000007FED98DC194 000000000000FF0C 000000000000003F 0000000000000132  ThreadSearch.dll!wxUniChar::To8bit
000007FED98E1319 000000000D63EBE8 000000000000003F 0000000000000000  ThreadSearch.dll!wxUniChar::operator char
000007FED9897A8D 000000000711B7B0 0000000006971878 000000000D63ED00  ThreadSearch.dll!TextFileSearcherText::MatchLine
000007FED9896BE3 000000000711B7B0 000000000255C158 0000000006971850  ThreadSearch.dll!TextFileSearcher::FindInFile
000007FED98B7ED0 0000000006971730 000000000255C158 000000000725DD50  ThreadSearch.dll!ThreadSearchThread::FindInFile
000007FED98B7988 0000000006971730 0000000000000000 0000000000000000  ThreadSearch.dll!ThreadSearchThread::Entry
000007FEDC0EB932 0000000006971730 0000000000000001 0000000000000000  wxmsw317u_gcc_cb.dll!wxThread::CallEntry
000007FEDC0F6228 0000000006971730 00000000070FB6E0 0000000000000000  wxmsw317u_gcc_cb.dll!wxThreadInternal::DoThreadStart
000007FEDC0F6380 000000000B264B00 0000000000000000 0000000000000000  wxmsw317u_gcc_cb.dll!wxThreadInternal::WinThreadStart
000007FEFF1B415F 000007FEFF241EA0 000000000B264B00 0000000000000000  msvcrt.dll!srand
000007FEFF1B6EBD 0000000000000000 0000000000000000 0000000000000000  msvcrt.dll!_ftime64_s
000000007782556D 0000000000000000 0000000000000000 0000000000000000  kernel32.dll!BaseThreadInitThunk
0000000077BC385D 0000000000000000 0000000000000000 0000000000000000  ntdll.dll!RtlUserThreadStart

I'm not sure how the call stack is generated. I put a ThreadSearch.dll (from the src\devel31_64\share\CodeBlocks\plugins) which should contains all the debug information, but the call stack does not contain the source file and line information.
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5910
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: error alert message when using ThreadSearch Plugin
« Reply #1 on: July 30, 2022, 10:29:30 am »
Code
bool TextFileSearcherText::MatchLine(std::vector<int> *outMatchedPositions,
                                     const wxString &originalLine)
{
    wxString line;
    if ( m_MatchCase == false )
    {
        line = originalLine.Lower();
    }
    else
    {
        line = originalLine;
    }

    wxString::size_type start = 0;
    int count = 0;

    const std::vector<int>::size_type countIdx = outMatchedPositions->size();

    do
    {
        // "TestTest Test"
        // start word [0;4], [9;4]
        // match word [9;4]
        // none [0;4] [4;4] [9;4]

        wxString::size_type pos = line.find(m_SearchText, start);
        if (pos == wxString::npos)
            break;

        if ((m_MatchWordBegin || m_MatchWord) && pos > 0)
        {
            // Try to see if this is the start of the word.
            const char prevChar = line.GetChar(pos - 1);
            if (isalnum(prevChar) || prevChar == '_')
            {
                start++;
                continue;
            }
        }

        if (m_MatchWord && (pos + m_SearchText.length() < line.length()))
        {
            // Try to see if this is the end of the word.
            const char nextChar = line.GetChar(pos + m_SearchText.length());
            if (isalnum(nextChar) || nextChar == '_')
            {
                start++;
                continue;
            }
        }

        // We have a match add positions for it.
        if (count == 0)
            outMatchedPositions->push_back(0);
        ++count;
        outMatchedPositions->push_back(pos);
        outMatchedPositions->push_back(m_SearchText.length());

        start = pos + m_SearchText.length();
    } while (1);

    if (count > 0)
    {
        (*outMatchedPositions)[countIdx] = count;
        return true;
    }
    else
        return false;
}


I guess the issue is that if a non ASCII char (for example, a Chinese character) is converted to a char, which cause the issue.
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5910
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: error alert message when using ThreadSearch Plugin
« Reply #2 on: July 30, 2022, 10:44:22 am »
...
I'm not sure how the call stack is generated. I put a ThreadSearch.dll (from the src\devel31_64\share\CodeBlocks\plugins) which should contains all the debug information, but the call stack does not contain the source file and line information.

I just found that in this link: https://vroby.ddns.net/Public/sdlBasic/MinGW/doc/drmingw/drmingw.html

It said, if we want to got the file and line debug information, the libbfd library is needed. So, can we have this library linked?

Quote
Using ExcHndl for you own purposes

If you incorporate ExcHndl in you own programs, especially those that you release to others, you can have almost the same exception information that you would get with Dr. Mingw, but with no need of the end user to have Dr. Mingw installed.

You can use ExcHndl in two ways:

    linking exchndl.o and libbfd.a with your program objects
    linking exchndl.o and libfd.a in the EXCHNDL.DLL and dinamically loading it at run-time. This can be done by linking just exchndl2.o or explicitly calling LoadLibrary("exchndl.dll")

The latter method is preferred because you have smaller executables and don't need to link the BFD library in all builds. The application wont fail if the EXCHNDL.DLL is missing.

So, does our exchndl.dll have the libbfd.a included? I guess it's not.  :(
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline AndrewCot

  • Plugin developer
  • Lives here!
  • ****
  • Posts: 678
Re: error alert message when using ThreadSearch Plugin
« Reply #3 on: July 30, 2022, 11:17:38 am »
My understanding is that the exchndl.dll is from https://github.com/jrfonseca/drmingw/releases

I have not looked at it more than that. I have had to grab the 32 bit release in order to incorporate it so you can run the 32 bit C::B without removing the code in app.cpp.
Dr MinGW is "linked" in via the following call in app.cpp:
Code
void CodeBlocksApp::InitExceptionHandler()
{
#ifdef __WXMSW__
    ExcHndlInit();
.... code removed......}

You could try using the latest version to see if it works better than the one you have. You can do this by updating the DLL's and yes file as I have done this before and it worked.
« Last Edit: July 30, 2022, 11:19:57 am by AndrewCot »

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5910
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: error alert message when using ThreadSearch Plugin
« Reply #4 on: July 30, 2022, 01:32:31 pm »
I download the latest release:
0.9.5 from github.com/jrfonseca/drmingw site.

And I paste the dlls and other files in the bin folder to the codeblocks' root folder. Then I make the crash, but it does not generate the RPT file.  :(

EDIT:

It looks like I have to rebuild the C::B (the src target)

EDIT2

It looks like the latest official release version 0.9.5 of drmingw can't catch the crash.

EDIT3

I will try to use this one from msys2 instead
Package: mingw-w64-x86_64-drmingw - MSYS2 Packages
« Last Edit: July 30, 2022, 04:11:05 pm by ollydbg »
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline BlueHazzard

  • Developer
  • Lives here!
  • *****
  • Posts: 3353
Re: error alert message when using ThreadSearch Plugin
« Reply #5 on: July 31, 2022, 12:05:28 am »
Please investigate future in this. Line numbers would be AWSOME

Offline AndrewCot

  • Plugin developer
  • Lives here!
  • ****
  • Posts: 678
Re: error alert message when using ThreadSearch Plugin
« Reply #6 on: July 31, 2022, 03:47:00 am »
Hope this is of some use.
I updated to the latest https://github.com/jrfonseca/drmingw/releases DrMingw 0.9.5 x64 last night and today in the rpt it has code and line numbers in it as per the RPT snippet below.

The compiler setup I am using is:
  • MYS2 MinGW64
  • gcc (Rev3, Built by MSYS2 project) 12.1.0
  • The debug compiler flags used were -g -O0 -ggdb
  • I built using gnu++17 option
The following is a compilation line from the build log for the src build:

Code
g++.exe -Wall -std=gnu++17 -m64 -g -O0 -ggdb -pipe -fmessage-length=0 -fexceptions -Winvalid-pch -DHAVE_W32API_H -D__WXMSW__ -DWXUSINGDLL -DcbDEBUG -DCB_PRECOMP -DwxUSE_UNICODE -D_WIN64 -DCB_EXPERIMENTAL_BUILD -DEXPORT_LIB -DWXMAKINGDLL_SCI -DEXPORT_EVENTS -iquoteD:\Andrew_Development\Work_Installers\CodeBLocks_Private_Experimental_GCC\src\.objs32_64\CodeBlocks\include -ID:\Andrew_Development\Work_Installers\CodeBLocks_Private_Experimental_GCC\src\.objs32_64\CodeBlocks\include -I. -ID:\Andrew_Development\Libraries\wxWidgets-3.2.0_win64\include -ID:\Andrew_Development\Libraries\wxWidgets-3.2.0_win64\lib\gcc_dll\mswud -ID:\Andrew_Development\Work_Installers\CodeBLocks_Private_Experimental_GCC\src\sdk\wxscintilla\include -ID:\Andrew_Development\Work_Installers\CodeBLocks_Private_Experimental_GCC\src\include\tinyxml -ID:\Andrew_Development\Work_Installers\CodeBLocks_Private_Experimental_GCC\src\include -ID:\Andrew_Development\Work_Installers\CodeBLocks_Private_Experimental_GCC\src\include\scripting\include -ID:\Andrew_Development\Work_Installers\CodeBLocks_Private_Experimental_GCC\src\exchndl\win_10\win64\include -c D:\Andrew_Development\Work_Installers\CodeBLocks_Private_Experimental_GCC\src\src\app.cpp -o D:\Andrew_Development\Work_Installers\CodeBLocks_Private_Experimental_GCC\src\.objs32_64\CodeBlocks\src\app.o
Crash RPT Snippet:


Code
-------------------

Error occurred on Sunday, July 31, 2022 at 11:00:29.

CodeBlocks.exe caused an Access Violation at location 00007FFFFAAAC2DC in module codeblocks.dll Reading from location FFFFFFFFFFFFFFFF.

AddrPC           Params
00007FFFFAAAC2DC 00000120EBD30BE0 0000001A76BFED50 00000000000005E9  codeblocks.dll!wxPostEvent+0x9c  [D:/Andrew_Development/Libraries/wxWidgets-3.2.0_win64/include/wx/event.h @ 4169]
  4167:     wxCHECK_RET( dest, "need an object to post event to" );
  4168:
> 4169:     dest->AddPendingEvent(event);
  4170: }
  4171:
00007FFFFA8BD86B 00000120F3EED750 00007FFF000049E8 0000000000000000  codeblocks.dll!PipedProcess::OnTerminate+0xd7  [D:/Andrew_Development/Work_Installers/CodeBLocks_Private_Experimental_GCC/src/sdk/pipedprocess.cpp @ 235]
   233:     event.SetInt(status);
   234:     event.SetX(m_Index);
>  235:     wxPostEvent(m_Parent, event);
   236:
   237:     if (m_pvThis)
00007FFFC2B555A6 00000000002309D0 0000000000002B10 0000000000000000  wxmsw32ud_gcc_cb.dll!wxExecuteWindowCbk+0xaf  [D:/Andrew_Development/Libraries/wxWidgets-3.2.0_win64/build/msw/../../src/msw/utilsexc.cpp @ 341]
   339:         if ( data->handler )
   340:         {
>  341:             data->handler->OnTerminate((int)data->dwProcessId,
   342:                                        (int)data->dwExitCode);
   343:         }

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5910
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: error alert message when using ThreadSearch Plugin
« Reply #7 on: July 31, 2022, 06:01:35 am »
Hi, AndrewCot, thanks for the help.

My cb_release_type is much simple: "-g".

I just search for a while, it looks "-O0" is the default gcc compiler if I don't set any "-Ox"

About the other option "-ggdb", some search result shows it is mainly the same as "-g" under Windows.

But anyway, I will try to rebuild C::B again with the option "-g -O0 -ggdb" as the "cb_release_type".

BTW: for me, I only put a dll (for example, the clangd_client.dll) which contains the debug information in my final testing C::B, I mean my C::B (such as codeblocks.exe) is stripped, while only one dll is not stripped.
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline AndrewCot

  • Plugin developer
  • Lives here!
  • ****
  • Posts: 678
Re: error alert message when using ThreadSearch Plugin
« Reply #8 on: July 31, 2022, 06:14:56 am »
When I googled and looked up the options there were some sites saying you needed this and not that and other said something different so I choose to include all three options to ensure I got exactly what I wanted.
On Windows my build/install process does not strip anything as I want to see where issues occur as you will appreciate I am trying a bunch of different bleeding edge changes and integrating allot of different things in my build.

Offline Miguel Gimenez

  • Developer
  • Lives here!
  • *****
  • Posts: 1553
Re: error alert message when using ThreadSearch Plugin
« Reply #9 on: July 31, 2022, 12:43:15 pm »
I have just commited a possible fix for the issue described in the original post. Ollydbg, can you check if this works?

Offline Miguel Gimenez

  • Developer
  • Lives here!
  • *****
  • Posts: 1553
Re: error alert message when using ThreadSearch Plugin
« Reply #10 on: July 31, 2022, 12:55:46 pm »
Regarding the Dr. MinGW part, recent versions do not run on Windows 7.

Offline AndrewCot

  • Plugin developer
  • Lives here!
  • ****
  • Posts: 678
Re: error alert message when using ThreadSearch Plugin
« Reply #11 on: July 31, 2022, 01:29:38 pm »
If you need to run on Win 7 or XP then you can grab the files in sub directories from the following directory to save time figuring out which Dr Mingw you need:

https://github.com/acotty/CodeBlocks_Unofficial_Testing/tree/master/src/exchndl

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5910
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: error alert message when using ThreadSearch Plugin
« Reply #12 on: July 31, 2022, 01:30:56 pm »
Regarding the Dr. MinGW part, recent versions do not run on Windows 7.
Thanks, do you know which is the latest version of Dr MinGW which support Windows 7. Or maybe there are someone which supply a better JIT debugger?

I have follow the way(use the -O0 and -ggdb option) AndrewCot did, and I have downloaded several release version of Dr.MinGW, and they did not give me the call stack.

drmingw-0.9.5-win64, does not work, no call stack crash report.
drmingw-0.9.4-win64, does not work, no call stack crash report.
drmingw-0.9.3-win64, I can't start C::B if I use this dll, it report some api-ms-win-downlevel-kernel32-l2-1-0.dll is missing

drmingw-0.9.2-win64, it works, but not the full call stack is printed, I got only two lines, like below:

Code
codeblocks.exe caused a Breakpoint at location 000007FECAE102D7 in module wxmsw317u_gcc_cb.dll.

AddrPC           Params
000007FECAE102D7 0000000007374C92 0000000007374BF0 000000000C4FEEB0  wxmsw317u_gcc_cb.dll!wxUniChar::ToHi8bit
000007FEB609C194 0000000000006210 0000000000000051 0000000000000132  ThreadSearch.dll!To8bit

So, it looks like the only version is the 0.9.1 which is in our SVN repo, but it can't print the line info of the call stack.  :(
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5910
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: error alert message when using ThreadSearch Plugin
« Reply #13 on: July 31, 2022, 01:32:29 pm »
If you need to run on Win 7 or XP then you can grab the files in sub directories from the following directory to save time figuring out which Dr Mingw you need:

https://github.com/acotty/CodeBlocks_Unofficial_Testing/tree/master/src/exchndl

Many thanks, I will download and try it and report back.
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5910
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: error alert message when using ThreadSearch Plugin
« Reply #14 on: July 31, 2022, 03:28:45 pm »
If you need to run on Win 7 or XP then you can grab the files in sub directories from the following directory to save time figuring out which Dr Mingw you need:

https://github.com/acotty/CodeBlocks_Unofficial_Testing/tree/master/src/exchndl

Many thanks, I will download and try it and report back.

I just checked it and the Win7 folder contains the 0.9.1 version of Dr.MinGW, which can generate a full call stack, but no line information.  :(
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.