Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #7889

Re: exception problem with cygwin - terminate called recursively

From Philipp Kraus <philipp.kraus@flashpixx.de>
Newsgroups comp.lang.c++
Subject Re: exception problem with cygwin - terminate called recursively
Date 2011-07-17 01:17 +0200
Organization 1&1 Internet AG
Message-ID <ivt669$6tv$1@online.de> (permalink)
References (3 earlier) <Xns9F24C20FD35B8myfirstnameosapriee@216.196.109.131> <ivsj85$njn$1@online.de> <Xns9F24EE788D51Bmyfirstnameosapriee@216.196.109.131> <ivt1ke$3k4$1@online.de> <Xns9F2510EDAC530myfirstnameosapriee@216.196.109.131>

Show all headers | View raw


On 2011-07-17 00:39:51 +0200, Paavo Helde said:

> Philipp Kraus <philipp.kraus@flashpixx.de> wrote in
> news:ivt1ke$3k4$1@online.de:
> 
>> On 2011-07-16 22:26:34 +0200, Paavo Helde said:
>> 
>>> Philipp Kraus <philipp.kraus@flashpixx.de> wrote in
>>> news:ivsj85$njn$1@online.de:
>>> 
>>>> On 2011-07-16 18:04:37 +0200, Paavo Helde said:
>>>> 
>>>>> Philipp Kraus <philipp.kraus@flashpixx.de> wrote in
>>>>> news:ivs5ac$c5s$1 @online.de:
>>>>> 
>>>>>> I'm a little bit closer on the problem context, I have mixed C and
>>>>>> C++ code in the class that throws the exception.
>>>>> [...]
>>>>>> problem. I try to recompile my sources with the -fexceptions flag,
>>>>>> but that does not wort. Shoud I compile my C libraries with the
>>>>>> flag?
>>>>> 
>>>>> The -fexceptions flag should not have any effect on C++ code
>>>>> whatsoever. You need this for compiling any C code which is
>>>>> supposed to let C++ exceptions propagate through it. On Windows
>>>>> platform MSVC implements exceptions at the OS level so there is no
>>>>> such special flag needed for C code, but things may be different
>>>>> with cygwin or gcc.
>>>> 
>>>> I think this question is off-topic, but do you know a working
>>>> solution for g++? I have compiled all my libraries and my code with
>>>> g++ / gcc, so should I set the
>>>> -fexceptions flag on each library or only on my code?
>>> 
>>> I don't know if this is off-topic or not, there is too less
>>> information. For example it is not clear what you mean exactly by
>>> "mix of C and C++ in the class" and if "your code" is C or C++. Maybe
>>> you could post a minimal example demonstrating the problem?
>> 
>> It's very simple. I use the libxml2 functions for parsing XML data.
>> The library have some error function / callback function for detecting
>> errors during the parsing.
> 
> You mention a callback function, but there is no callback function in
> your example code. Do you use xmlSetGenericErrorFunc()? If yes, then this
> should be included in the example.
> 
>> eg:
>> 
>> my xmlclass {
>> public:
>> doxml( std::string p_xml ) {
>> 
>> xmlParseMemory(p_xml.c_str)
>> if (xmlErrorDetect()) {
>> xmlClear()
>> throw std::runtime_error("error")
>> }
>> }
>> }
>> 
>> In my main function
>> {
>> myxmlclass obj;
>> try {
>> obj.doxml("abcdef");
>> } catch (...) {
>> std::cout << "exception is caught" << std::endl;
>> }
>> }
> 
> This code does not compile (lots of missing semicolons and other errors),
> neither does it throw exceptions through C code, so I believe it has no
> relevance to your real problem. Please post a compilable example
> demonstrating the problem!

The original excerpt of the method is:

        xmlResetLastError();
        bool l_error = false;

        xmlGenericErrorFunc l_fptr = myclass::XMLErrorFunction; <= 
XMLErrorFunction is a static
					method of the class which is empty to supress parsing content on the CLI
        initGenericErrorDefaultFunc( &l_fptr );

        const char* l_xmlcontent = p_xml.c_str();
        xmlDocPtr l_xml          = xmlParseMemory( l_xmlcontent, 
strlen(l_xmlcontent) );
        if ((!l_xml) || (xmlGetLastError())) {
            if (l_xml)
                xmlFreeDoc( l_xml );
            xmlCleanupParser();
            throw std::runtime_error("XML data can not be parsed");  <= 
this exception is thrown, but can not be caught /
						here I have tested with std::exception, derivated exceptions...
        }


> AFAIK -fexceptions are not enabled by default for C code, are you sure
> that the libxml2 library has been compiled with -fexceptions?

I have testet with and without compiling -fexceptions, both test are 
create the same problem.

> You cannot solve the problem without understanding it. Throwing
> exceptions through non-C++ code is undefined behavior, but your example
> does no such thing, so I'm not sure either where the problem is.

I have create a class, that uses with external C includes the libxml2 
calls for parsing XML data. In this class I throw an
exception (see excerpt), which should be caught in the main. On Linux 
and OSX g++ it works, exception is thrown and caught.
On Windows (g++ under Cygwin) the exception is thrown (checked with 
gdb) but not caught. Windows creates the message:
terminate called after throwing an instance of <exception> terminate 
called recursively
The library is compiled on all three systems with gcc and my code with 
g++. All compilers are version 4.x, only the subversions
are different

Phil

Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Re: exception problem with cygwin - terminate called recursively peter koch <peter.koch.larsen@gmail.com> - 2011-07-14 09:00 -0700
  Re: exception problem with cygwin - terminate called recursively Philipp Kraus <philipp.kraus@flashpixx.de> - 2011-07-14 18:11 +0200
  Re: exception problem with cygwin - terminate called recursively Ian Collins <ian-news@hotmail.com> - 2011-07-15 07:36 +1200
  Re: exception problem with cygwin - terminate called recursively Philipp Kraus <philipp.kraus@flashpixx.de> - 2011-07-16 15:56 +0200
    Re: exception problem with cygwin - terminate called recursively Paavo Helde <myfirstname@osa.pri.ee> - 2011-07-16 11:04 -0500
      Re: exception problem with cygwin - terminate called recursively Philipp Kraus <philipp.kraus@flashpixx.de> - 2011-07-16 19:54 +0200
        Re: exception problem with cygwin - terminate called recursively Paavo Helde <myfirstname@osa.pri.ee> - 2011-07-16 15:26 -0500
          Re: exception problem with cygwin - terminate called recursively Philipp Kraus <philipp.kraus@flashpixx.de> - 2011-07-16 23:59 +0200
            Re: exception problem with cygwin - terminate called recursively Paavo Helde <myfirstname@osa.pri.ee> - 2011-07-16 17:39 -0500
              Re: exception problem with cygwin - terminate called recursively Philipp Kraus <philipp.kraus@flashpixx.de> - 2011-07-17 01:17 +0200
                Re: exception problem with cygwin - terminate called recursively Paavo Helde <myfirstname@osa.pri.ee> - 2011-07-17 02:30 -0500
                Re: exception problem with cygwin - terminate called recursively Philipp Kraus <philipp.kraus@flashpixx.de> - 2011-07-17 11:18 +0200

csiph-web