Code::Blocks Forums

User forums => Using Code::Blocks => Topic started by: LETARTARE on July 01, 2020, 07:59:35 pm

Title: An unhandled exception ...
Post by: LETARTARE on July 01, 2020, 07:59:35 pm
I wanted to edit some old translation files :
Quote
'All_codeblocks.po'  ( # 1.5MB)
'All_codeblocks.pot' ( # 1 MB)
with cb-12180, wx3.1.3, gcc-8.1.0, win32 (Vista Business)

When saving :
1- the cursor indicates a wait
2- memory usage increases linearly up to
3- Appearance of a window indicating an exception not maintained
4- after acknowledgement on any CB answer disappears
5- no RPT report

Active plugins:
Quote
- AutoSave
- Compiler
- Environment variables
- File extension handler

Quote
No problem with cb12180, wx3.0.3, gcc-7.5.0 OpenSuse-Leap-15.1

I'll test under Win7 tomorrow.

Can you check if you have the same problem ??

Attachments
- All_codeblocks.po
- cbBigFile.png
in
CBBigFile.7z
Title: Re: An unhandled exception ...
Post by: oBFusCATed on July 01, 2020, 08:20:21 pm
What are the exact steps to reproduce the problem?
Title: Re: An unhandled exception ...
Post by: stahta01 on July 01, 2020, 08:37:22 pm
Did you answer Abort, Retry, or ignore to the message box?

Edit: I will try Abort; building C::B on Windows 7 64 bit with wxWidgets 3.0.x 64 bit.
Edit2: Saw no problem with C::B on Windows 7 64 bit with wxWidgets 3.0.x 64 bit
Now trying wxWidgets 3.1.x 64 bit; but, without the steps likely will fail to see error.
Edit4: Did not see problem with wxWidgets 3.1.3.

Edit3: Using MSys2 GCC self compiled 10.1.1 20200621

Tim S.
Title: Re: An unhandled exception ...
Post by: stahta01 on July 02, 2020, 02:26:53 am
I just did a code search for the message and found one in "wxApp::OnExceptionInMainLoop" that is in file "src/msw/app.cpp".

Code
bool wxApp::OnExceptionInMainLoop()
{
    // ask the user about what to do: use the Win32 API function here as it
    // could be dangerous to use any wxWidgets code in this state
    switch (
            ::MessageBox
              (
                NULL,
                wxT("An unhandled exception occurred. Press \"Abort\" to \
terminate the program,\r\n\
\"Retry\" to exit the program normally and \"Ignore\" to try to continue."),
                wxT("Unhandled exception"),
                MB_ABORTRETRYIGNORE |
                MB_ICONERROR|
                MB_TASKMODAL
              )
           )
    {
        case IDABORT:
            throw;

        default:
            wxFAIL_MSG( wxT("unexpected MessageBox() return code") );
            wxFALLTHROUGH;

        case IDRETRY:
            return false;

        case IDIGNORE:
            return true;
    }
}

Tim S.
Title: Re: An unhandled exception ...
Post by: LETARTARE on July 02, 2020, 07:35:23 pm
@stahta01
Thank you for searching for the 'wx' function responsible for the message.
I can't find the call of this function...

@obfuscated
Steps to reproduce the problem with cb-12180,  gcc-8.1.0-dwarf, wx3.1.3,, win32 (Vista Business) :
1- active project: any
2- load 'All_codeblocks.po'
3- add spaces anywhere
4- save the file ... from that moment on,
- the cursor indicates a standby state for #40 S, then an exception message appears (see attached file)
Quote
1- action : 'Abortl' twice => new message 'Error unknown';  action : 'ok' once => CB closes
2- action : 'Retry' or Ignore' once  => CB closes and the modified file is not saved.

I've been running tests on Win7
Quote
1- win7-32: cb-12180, gcc-810-dwarf, wx-3.1.3
2- win7-64: cb-12180, gcc-810-seh, wx3.1.3
the save is correct
Title: Re: An unhandled exception ...
Post by: oBFusCATed on July 02, 2020, 09:10:30 pm
I can't reproduce this on linux. You'll have to build a version with symbols and attach a debugger.
Do I understand correctly that the issue happens on vista, but it doesn't happen on win7?
Title: Re: An unhandled exception ...
Post by: stahta01 on July 02, 2020, 10:32:03 pm
Quote
1- active project: any

Does the problem happen if there is no open project?
Because all my tests were with no open projects.

Tim S.
Title: Re: An unhandled exception ...
Post by: LETARTARE on July 03, 2020, 10:40:46 am
@stahta01
Quote
Win32, cb12180, gcc-810-dwarf, wx-313
I've just done the test without a project: the result is identical

@obfuscated
If I understand your instructions correctly, I have to run a version of 'cb-12180' in debug mode from another version of 'cb' to capture the backup of the file.

I did another test with a version
Quote
cb-12171, gcc-810-sljl, wx-313-sljl, Vista-32
and with 'WhatIsHang' from 'http://www.nirsoft.net'.
I managed to capture some information (bigfilepo.txt)
I also captured the state of Vista's memory  (processors.png)
- the linear increase of the memory corresponds to the saving of the file until the exception message is displayed.
- the memory drop corresponds to the destruction of 'CB'.


Title: Re: An unhandled exception ...
Post by: LETARTARE on July 03, 2020, 11:42:27 am
I just ran another test on Vista-32 :
I use 'cb-12171, gcc-810-sljl, wx-313-sljl',
wherein I load 'cb-12180, gcc-810-dwarf, wx-313-dwarf'.

I'm running 'cb-12180' in which
1- I load the file 'All_codeblocks.po'.
2- I modify this file
3- I save it
=> the backup is done properly !!
Title: Re: An unhandled exception ...
Post by: LETARTARE on July 04, 2020, 10:52:59 am
I think I've found the culprit !!
Code
'cbEditor::Save()'
call
Code
'm_pData->EnsureConsistentLineEnds();' 
who call
Code
'control->ConvertEOLs(control->GetEOLMode());' 
which is creating the problem!
A remark : 'control->GetEOLMode()' return 0 (CRLF) while the file contains only 'LF' !

If I comment on this call the problem disappears!
So it's in ...
Code
void wxScintilla::ConvertEOLs(int eolMode)
{
    SendMsg(SCI_CONVERTEOLS, eolMode, 0);
}

Then I'm no longer competent.
Title: Re: An unhandled exception ...
Post by: oBFusCATed on July 04, 2020, 11:42:10 am
Do the problem still happen if you disable optimizations? (set a global variable "cb_release_type=-g -O0")
Title: Re: An unhandled exception ...
Post by: LETARTARE on July 04, 2020, 03:14:01 pm
No, no improvement
Title: Re: An unhandled exception ...
Post by: LETARTARE on July 04, 2020, 05:48:39 pm
By finding out why 
Quote
A remark : 'control->GetEOLMode()' return 0 (CRLF) while the file contains only 'LF' !
I replaced
Code
 // control->ConvertEOLs(control->GetEOLMode());
by
Code
control->ConvertEOLs(2);
in 'Scintilla.h' we find
Code
#define SC_EOL_LF 2

and then BINGO : it works, no more problems !!

It is therefore a bad detection of the end of line by
Code
int wxScintilla::GetEOLMode() const
{
    return SendMsg(SCI_GETEOLMODE, 0, 0);
}
with Win32.

Gentlemen developers, to your keyboards!

Title: Re: An unhandled exception ...
Post by: stahta01 on July 04, 2020, 06:29:54 pm
By finding out why 
Quote
A remark : 'control->GetEOLMode()' return 0 (CRLF) while the file contains only 'LF' !
I replaced
Code
 // control->ConvertEOLs(control->GetEOLMode());
by
Code
control->ConvertEOLs(2);
in 'Scintilla.h' we find
Code
#define SC_EOL_LF 2

and then BINGO : it works, no more problems !!

It is therefore a bad detection of the end of line by
Code
int wxScintilla::GetEOLMode() const
{
    return SendMsg(SCI_GETEOLMODE, 0, 0);
}
with Win32.

Gentlemen developers, to your keyboards!

Not till you post what settings you had inside Code::Blocks!
End of Line options are:
The real important two are
"Ensure Consistent EOLs" and "End of Line Mode".

Tim S.
Title: Re: An unhandled exception ...
Post by: LETARTARE on July 04, 2020, 07:22:55 pm
Yes, you are right.
I use with Win-32
Quote
Ensure Consistent EOLs = Yes
End of Line : CRLF

Well, the file I used contained only Linux end of line (LF) and with the previous options chosen: CB wants to modify the end of line of the file with the end of line of the option and crashes with Win32 !

Title: Re: An unhandled exception ...
Post by: oBFusCATed on July 04, 2020, 07:35:22 pm
Yes, but this shouldn't cause a crash. Is this crash happening only on win32? Can you reproduce this with win64?
Title: Re: An unhandled exception ...
Post by: LETARTARE on July 06, 2020, 05:20:12 pm
Summary of the latest tests to date :

I use two files :
Quote
1- 'All_codeblocksLF.po' with end of line 'LF'.
2- 'All_codeblocksCRLF.po' with end of line 'CRLF'
and always 'cb-12180' compiled with the mentioned 'gcc'.
1- I load the file in the editor of CB
2- I'm modifying it.
3- I'm saving him.

Quote
Window OS:
CB->Editor->Ensure Consistent EOLs = Yes
CB->Editor->End of Line : CRLF
Win7-64bits :  gcc-810-32 bits, wx-313,  file 'LF' => crash, file 'CRLF' => good
Win7-64bits :  gcc-810-64 bits, wx-313,  file 'LF' => crash, file 'CRLF' => good
Vista-32bits :  gcc-810-32 bits, wx-313,  file 'LF' => crash, file 'CRLF' => good
Exception message for the crash.
Quote
Linux OS (OpenSuse-Leap-15.1 last update)
CB->Editor->Ensure Consistent EOLs = Yes
CB->Editor->End of Line : LF
gcc-750-64bits, wx-303 => file 'LF' => good, file 'CRLF' => crash
No exception message for the crash !
Under OpenSuse-Leap-15.1 , the file with 'CRLF' crashes the system if the CB application is not destroyed before the memory is saturated !

You can see that the error occurs if the file does not have the editor's line endings

I forgot the files...
Title: Re: An unhandled exception ...
Post by: oBFusCATed on July 19, 2020, 01:30:01 am
What are the exact steps to reproduce this?

I've done:
1. loaded the LF file. Which was slow because of the spellchecker.
2. executed Edit -> End-of-line mode -> Windows (CR & LF). This took less then ten seconds, but finished successfully. No excessive memory usage.
Title: Re: An unhandled exception ...
Post by: LETARTARE on July 20, 2020, 11:46:01 am
Which operating system ?  I'm guessing Win??

If with CB you transform the end of lines in accordance with the operating system: no problem.
If you don't do the transformation: crash

The default is to use a badly coded file at the end of the line: see the examples in my previous message.
If the end of the lines don't match, I think Scintilla is detecting the wrong file!
Title: Re: An unhandled exception ...
Post by: oBFusCATed on July 20, 2020, 07:50:02 pm
My OS Linux, 64bit.
Please post step by step instructions.
Code
1. start codeblocks
2. open this
3. do this
4.
5.

If you want this fixed please fill steps 2-5. I've spend too much time trying to reproduce it and if I'm not able to reproduce it in 5 minutes, I'll switch to doing something else.
Title: Re: An unhandled exception ...
Post by: LETARTARE on July 21, 2020, 04:08:41 pm
My test wit Linux :
- Linux OS (OpenSuse-Leap-15.1 last update) with 6GB memory and 2GB swap
- cb-12180 compiled with gcc-750-64bits, wx-303

1- start cb-12180 wit no project
    CB->Editor->Ensure Consistent EOLs = Yes
    CB->Editor->End of Line : LF
2- load 'All_codeblocksCRLF.po' with end of line 'CRLF'
3- add a space and save the file
4- the cursor indicates an important background task and the memory used increases linearly
5- ATTENTION : you must kill CB before reaching maximum memory or the system will crash !
   No message appears !

I had to reinstall a copy of my OpenSuse disk after this mishap !

Title: Re: An unhandled exception ...
Post by: oBFusCATed on July 22, 2020, 10:09:19 am
It seems to be caused by the "ChangeBar" patches to Scintilla we're using. It is not crashing on my machine, but uses a lot of memory, so I guess if you look in dmesg you'll see an OoM message. You can improve the testing time of this by disabling swap. Without swap when you get out of memory you'll get a direct crash. If you want to prevent crashes but you have a lot of time you could setup bigger swap.

I'm not sure how to resolve the problem, I'm not really familiar with the patch and should investigate it.
Title: Re: An unhandled exception ...
Post by: LETARTARE on July 22, 2020, 04:20:16 pm
Thank you for the test that partially corroborates mine.
Maybe contact the developer who maintains 'Scintilla'?
Title: Re: An unhandled exception ...
Post by: oBFusCATed on July 23, 2020, 02:22:09 am
This is the plan, but talking to Neil is not the most pleasant or fruitful experience. :(