On 8/15/2020 11:53 PM, Takashi Yano via Cygwin wrote:
On Sat, 15 Aug 2020 20:38:01 -0300
David McFarland via Cygwin <cygwin@cygwin.com> wrote:
I was just debugging a c++ app (b2 build system from boost), and noticed
that it would appear to exit unexpectedly without an error. This turned
out to be when an unhandled C++ exception was thrown.
On a fresh install of cygwin with gcc-g++, this program will throw an
exception from the std::string constructor:
c++ -x c++ - <<END
#include <string>
int main() { std::string str(nullptr); return 0; }
END
When it's executed from the shell it returns zero, but execution stops
at the exception.
$ ./a; echo $?
0
When executed under gdb, the exception is caught, and the process exits
non-zero when continued:
(gdb) r
Starting program: /home/corngood/a
[New Thread 4300.0x1390]
[New Thread 4300.0x1d24]
[New Thread 4300.0x1d48]
[New Thread 4300.0x80c]
gdb: unknown target exception 0x20474343 at 0x7ff8d2cfa799
Thread 1 "a" received signal ?, Unknown signal.
0x00007ff8d2cfa799 in RaiseException () from
/cygdrive/c/WINDOWS/System32/KERNELBASE.dll
(gdb) c
Continuing.
[Thread 4300.0x1d24 exited with code 541541187]
[Thread 4300.0x1870 exited with code 541541187]
[Thread 4300.0x1d48 exited with code 541541187]
[Thread 4300.0x1390 exited with code 541541187]
[Inferior 1 (process 4300) exited with code 04021641503]
(gdb)
When executed under strace, it exits with an error as expected:
$ strace -o /dev/null a; echo $?
67
That's as far as I've investigated so far.
Is this the same issue with
https://cygwin.com/pipermail/cygwin/2019-October/242795.html ?
As far as I tested, this does not occur in 32-bit cygwin.
This doesn't seem to be a new issue. I found the following report from 6 years
ago, on Cygwin 1.7.30 with GCC 4.9.0:
https://stackoverflow.com/questions/24402412/program-executed-on-cygwin-does-not-report-a-thrown-exception
Ken
--
Problem reports: https://cygwin.com/problems.html
FAQ: https://cygwin.com/faq/
Documentation: https://cygwin.com/docs.html
Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple