queued-up cout/cerr lines freeze CL
Posted: Tue Mar 11, 2014 4:23 am
Hi Eran,
CL seems to lock up long after a program has terminated if there are many queued-up log entries to stdout and/or stderr. The UI is completely frozen: you can't stop the debugger with shift-F5 or any other command. The choice is to either kill the CL process or wait for CL to catch up until it has processed all the pending entries and becomes responsive again, which can take quite a while.
I reproduced the problem with the attached sample; it's an extreme case with 1 million entries to exhibit the problem. It seems to be related to how CL queues up & then outputs messages to the "debugging:" window. You can confirm the program is already done by looking at "my.log" while CL catches up.
The same program runs instantaneously if you comment-out the "cout << " line or if you run the binary from outside CL with:
Note that GDB terminal / full debugger loggging are disabled, so is Gtk redirect cerr / cout to log file. This is with CL trunk and wx trunk, under Debian Wheezy x64.
I had a similar problem once and from the CPU% it seems that Refresh()/Update() are called too often. Maybe you could cancel queued events on program termination since that window goes away anyway (and file logs are already written), or query wxKeyEvents every 200ms or so, or process queued-up logs in bulk when more than one line is pending.
Let me know if I can help further, thx & cheers,
-- p
CL seems to lock up long after a program has terminated if there are many queued-up log entries to stdout and/or stderr. The UI is completely frozen: you can't stop the debugger with shift-F5 or any other command. The choice is to either kill the CL process or wait for CL to catch up until it has processed all the pending entries and becomes responsive again, which can take quite a while.
I reproduced the problem with the attached sample; it's an extreme case with 1 million entries to exhibit the problem. It seems to be related to how CL queues up & then outputs messages to the "debugging:" window. You can confirm the program is already done by looking at "my.log" while CL catches up.
The same program runs instantaneously if you comment-out the "cout << " line or if you run the binary from outside CL with:
Code: Select all
./CL_logtest 2>&1 > my.log
I had a similar problem once and from the CPU% it seems that Refresh()/Update() are called too often. Maybe you could cancel queued events on program termination since that window goes away anyway (and file logs are already written), or query wxKeyEvents every 200ms or so, or process queued-up logs in bulk when more than one line is pending.
Let me know if I can help further, thx & cheers,
-- p