[zeromq-dev] SEHException 0x80004005 from ZeroMQ/libzmq

Luca Boccassi luca.boccassi at gmail.com
Sun Dec 4 14:20:22 CET 2016


This sounds like a good idea! If you could model it in a .api and mark
it as draft we can merge it and iterate from there

On Sun, 2016-12-04 at 01:19 +0000, Osiris Pedroso wrote:
> I meant quick stab at zdump.h...
> 
> On Sat, Dec 3, 2016 at 7:18 PM Osiris Pedroso <opedroso at gmail.com>
> wrote:
> 
>         Quick stack at zdump.h included
>         
>         
>         On Sat, Dec 3, 2016 at 7:04 PM Osiris Pedroso
>         <opedroso at gmail.com> wrote:
>         
>                 I thought some more about this and I think I would
>                 like to implement this functionality as an actor named
>                 zdump.
>                 
>                 Implementing it as an actor would allow any programs
>                 that use CZMQ actors to add the ability to save
>                 minidumps on exceptions, and they would only be active
>                 if the developer intended and created an instance of
>                 zdump in the process.
>                 
>                 So while instantiated, it would hook itself as a the
>                 handler of last resort in the C Run Time library.
>                 When this actor's instance is destroyed it removes
>                 itself, therefore no more minidumps would be created.
>                 The messages that this actor would accept would be:
>                 "ENABLE" "DEFAULT", specific exception code (e.g.
>                 0xc0000005 is access violation, 0x80004005 is access
>                 denied,...)
>                 "DISABLE" "DEFAULT", specific exception code 
>                 "WHERE" "root-dir-where-to-save-dumps\", default "%
>                 TEMP%"
>                 "ROOTNAME" "DUMP", default current's executable
>                 rootname
>                 
>                 
>                 DEFAULT could be a name for access violation exception
>                 code, since this is the most common and important
>                 exception that ones wants to know is happening in
>                 their programs. Depending how the program is written,
>                 it could be swallowed silently by implementation.
>                 Creating the minidumps would let the developer/user
>                 know that is taking place, plus save a the exact
>                 context where it happened.
>                 
>                 
>                 Multiple instances can be created, since handler of
>                 last resort can be chained (defining one returns the
>                 function pointer to the previous one).
>                 
>                 
>                 I don't know if it should be part of CZMQ or just an
>                 object out there that people could use.
>                 Obviously as part of CZMQ many more people would know
>                 about it and use it.
>                 But writing those XML files to generate interface and
>                 code are complicated...
>                 
>                 
>                 Toughts?
>                 
>                 
>                 
>                 On Thu, Nov 24, 2016 at 5:37 AM Luca Boccassi
>                 <luca.boccassi at gmail.com> wrote:
>                 
>                         Hi,
>                         
>                         I have done something along those lines a
>                         while back for *nix. If
>                         libunwind is available at build time then this
>                         code will print a
>                         gdb-style backtrace on abort:
>                         
>                         https://github.com/zeromq/libzmq/blob/master/src/err.cpp#L391
>                         
>                         Need to be careful with core dumps and
>                         backtraces as they might expose
>                         private data about proprietary applications,
>                         so it should be opt-in to
>                         avoid nasty surprises for enterprise users and
>                         the like.
>                         
>                         But I don't see any problem in principle, as
>                         long as it's a
>                         well-documented opt-in.
>                         
>                         On Thu, 2016-11-24 at 08:40 +0000, Auer, Jens
>                         wrote:
>                         > Hi,
>                         >
>                         > Thinking about it, I may change my mind. It
>                         may be interesting to be able to generate a
>                         core dump (mini dump) in the zmq_assert
>                         statements if it can be switched on or off,
>                         e.g. by a define or even context property. I
>                         think this would help finding issues in
>                         ZeroMQ.
>                         >
>                         > Cheers,
>                         > Jens
>                         >
>                         > --
>                         > Dr. Jens Auer | CGI | Software Engineer
>                         > CGI Deutschland Ltd. & Co. KG
>                         > Rheinstraße 95 | 64295 Darmstadt | Germany
>                         > T: +49 6151 36860 154
>                         > jens.auer at cgi.com<mailto:jens.auer at cgi.com>
>                         > Unsere Pflichtangaben gemäß § 35a GmbHG / §§
>                         161, 125a HGB finden Sie unter
>                         de.cgi.com/pflichtangaben<http://de.cgi.com/pflichtangaben>.
>                         >
>                         > CONFIDENTIALITY NOTICE:
>                         Proprietary/Confidential information belonging
>                         to CGI Group Inc. and its affiliates may be
>                         contained in this message. If you are not a
>                         recipient indicated or intended in this
>                         message (or responsible for delivery of this
>                         message to such person), or you think for any
>                         reason that this message may have been
>                         addressed to you in error, you may not use or
>                         copy or deliver this message to anyone else.
>                         In such case, you should destroy this message
>                         and are asked to notify the sender by reply
>                         e-mail.
>                         >
>                         > From: zeromq-dev
>                         [mailto:zeromq-dev-bounces at lists.zeromq.org]
>                         On Behalf Of Auer, Jens
>                         > Sent: 23 November 2016 14:17
>                         > To: ZeroMQ development list
>                         > Subject: Re: [zeromq-dev] SEHException
>                         0x80004005 from ZeroMQ/libzmq
>                         >
>                         > Hi,
>                         >
>                         > I had a similar experience when I included
>                         crashrpt to a Windows application I was
>                         working on. It greatly increases the ability
>                         to fix bugs, discuss priorities and fight the
>                         “the software is getting worse with every
>                         release” flames from other people.
>                         >
>                         > However, I don’t think this should be
>                         included in ZeroMQ. ZeroMQ is a library that
>                         application developer use, and the same
>                         developer must decide if a crash reporter
>                         should be used or not.
>                         >
>                         > Cheers,
>                         > Jens
>                         >
>                         > --
>                         > Dr. Jens Auer | CGI | Software Engineer
>                         > CGI Deutschland Ltd. & Co. KG
>                         > Rheinstraße 95 | 64295 Darmstadt | Germany
>                         > T: +49 6151 36860 154
>                         > jens.auer at cgi.com<mailto:jens.auer at cgi.com>
>                         > Unsere Pflichtangaben gemäß § 35a GmbHG / §§
>                         161, 125a HGB finden Sie unter
>                         de.cgi.com/pflichtangaben<http://de.cgi.com/pflichtangaben>.
>                         >
>                         > CONFIDENTIALITY NOTICE:
>                         Proprietary/Confidential information belonging
>                         to CGI Group Inc. and its affiliates may be
>                         contained in this message. If you are not a
>                         recipient indicated or intended in this
>                         message (or responsible for delivery of this
>                         message to such person), or you think for any
>                         reason that this message may have been
>                         addressed to you in error, you may not use or
>                         copy or deliver this message to anyone else.
>                         In such case, you should destroy this message
>                         and are asked to notify the sender by reply
>                         e-mail.
>                         >
>                         > From: zeromq-dev
>                         [mailto:zeromq-dev-bounces at lists.zeromq.org]
>                         On Behalf Of Osiris Pedroso
>                         > Sent: 23 November 2016 11:39
>                         > To:
>                         zeromq-dev at lists.zeromq.org<mailto:zeromq-dev at lists.zeromq.org>
>                         > Subject: Re: [zeromq-dev] SEHException
>                         0x80004005 from ZeroMQ/libzmq
>                         >
>                         > I know how to generate minidumps in Windows
>                         and create a small (~20Kb) file that would
>                         have a snapshot of the stack and lots of other
>                         goodies.
>                         > To access it, one opens the generated .DMP
>                         file with "WinDBG.exe -k minidump.dmp", enter
>                         the command ".ecxr" then "kvn" to see stack at
>                         the failure point in time.
>                         > If PDB symbol files for the correct version
>                         of the DLLs being used are available at their
>                         build locations, the "kvn" command will even
>                         tell you the source file and line number where
>                         the exception happened and you will be able to
>                         see local variable values for the functions on
>                         the stack by typing "dv" in WinDBG for each
>                         stack frame.
>                         >
>                         > Obviously this is Windows only
>                         functionality.
>                         >
>                         > Earlier in the year I made a contribution to
>                         documentation of ZeroMQ using a .DOC file and
>                         I felt shunned by the community when my PR was
>                         denied because it used a Windows document
>                         format.
>                         > I even offered to format the same file as
>                         PDF, because the important thing was the
>                         information it contained, not the format, to
>                         no avail.
>                         > At the time, (and even now) it felt to me
>                         like a betrayal of the C4 tenets, but lets not
>                         get into religious wars here.
>                         >
>                         > I can tell you that in my professional work,
>                         I have brought down my company's main product
>                         from 10 crashes/DAY/user to 0.5
>                         crashes/MONTH/user by iterating on generating
>                         these minidumps, asking the users to send them
>                         in, analyzing them and fixing the problems
>                         they brought to our attention, so this is
>                         proven technology.
>                         >
>                         > If the community feels that this is a good
>                         idea (add a Windows specific code to generate
>                         minidumps when exceptions happen), I would
>                         love to invest the time to this effort.
>                         >
>                         >
>                         > On Mon, Nov 14, 2016 at 1:30 PM Aaron
>                         Friesen
>                         <AFriesen at spirae.com<mailto:AFriesen at spirae.com>> wrote:
>                         > All,
>                         >
>                         > Getting an SEHException 0x80004005 from
>                         ZeroMQ (4.1.0.21) / libzmq (4.1.5.0)
>                         >
>                         > Multiple processes went down with the same
>                         exception at the same time.
>                         >
>                         > Was not able to get a dump but the
>                         application logs showed the following stack
>                         trace:
>                         >
>                         > System.Exception
>                         System.Runtime.InteropServices.SEHException
>                         (0x80004005): External component has thrown an
>                         exception.
>                         > at ZeroMQ.lib.zmq.zmq_msg_send(IntPtr msg,
>                         IntPtr socket, Int32 flags)
>                         > at ZeroMQ.ZSocket.SendFrame(ZFrame frame,
>                         ZSocketFlags flags, ZError& error)
>                         > at ZeroMQ.ZSocket.SendFrames(IEnumerable`1
>                         frames, Int32& sent, ZSocketFlags flags,
>                         ZError& error)
>                         > at ZeroMQ.ZSocket.SendFrames(IEnumerable`1
>                         frames, ZSocketFlags flags, ZError& error)
>                         > at ZeroMQ.ZSocket.SendMessage(ZMessage msg,
>                         ZSocketFlags flags, ZError& error)
>                         > at ZeroMQ.ZSocket.SendMessage(ZMessage msg,
>                         ZSocketFlags flags)
>                         > at ZeroMQ.ZSocket.SendMessage(ZMessage msg)
>                         > at xxxxxx.SocketsThread(Object
>                         eventWaitHandle)
>                         >
>                         > No line numbers available, but based on the
>                         logged message, it would have occurred in the
>                         following code.  Because the stack trace does
>                         not include any of the calls within the try
>                         block (PollIn, ProcessRequest,
>                         ProcessSubscription), I am at a loss as to
>                         what exactly was executing at the time of the
>                         exception that was calling SendMessage.
>                         >
>                         > Does anyone have any ideas as to what I
>                         might be doing wrong, or what the problem
>                         might be and how to avoid it?
>                         >
>                         >
>                         >
>                         >                 ZSocket[] sockets = new
>                         ZSocket[] { _requestSocket,
>                         _subscriberSocket };
>                         >                 ZPollItem[] pollItems = new
>                         ZPollItem[] { ZPollItem.CreateReceiver(),
>                         ZPollItem.CreateReceiver() };
>                         >                 ZMessage[] messages = null;
>                         >
>                         >                 try
>                         >                 {
>                         >                     TimeSpan timeout =
>                         TimeSpan.FromMilliseconds(100);
>                         >
>                         >                     while (_run)
>                         >                     {
>                         >                         if
>                         (ZPollItems.PollIn(sockets, pollItems, out
>                         messages, out error, timeout))
>                         >                         {
>                         >                             if (error ==
>                         ZError.EAGAIN)
>                         >                                 continue;
>                         >
>                         >                             if (error ==
>                         ZError.ETERM)
>                         >                                 break;
>                         >
>                         >                             if (messages ==
>                         null)
>                         >                                 continue;
>                         >
>                         >                             if
>                         (messages[0] != null)    // Request
>                         >
>                          ProcessRequest(messages[0]);
>                         >
>                         >                             if
>                         (messages[1] != null)    // Subscription
>                         >
>                          ProcessSubscription(messages[1]);
>                         >                         }
>                         >                         else
>                         >                         {
>                         >                             if (error ==
>                         ZError.EAGAIN)
>                         >                                 continue;
>                         >
>                         >                             if (error !=
>                         ZError.None)
>                         >                                 break;
>                         >                         }
>                         >                     }
>                         >                 }
>                         >                 catch (Exception ex)
>                         >                 {
>                         >                     if (!(ex is
>                         ThreadAbortException))
>                         >                     {
>                         >
>                          _logger.FatalException(string.Format("Exception encountered while polling for messages on sockets. Thread '{0}' shutting down.", threadName), ex);
>                         >
>                         >
>                          Environment.Exit(-1);
>                         >                     }
>                         >                 }
>                         >
>                         > Thank you in advance,
>                         >
>                         > Aaron Friesen
>                         >
>                         >
>                         _______________________________________________
>                         > zeromq-dev mailing list
>                         >
>                         zeromq-dev at lists.zeromq.org<mailto:zeromq-dev at lists.zeromq.org>
>                         >
>                         http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>                         >
>                         _______________________________________________
>                         > zeromq-dev mailing list
>                         > zeromq-dev at lists.zeromq.org
>                         >
>                         http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>                         
>                         
>                         --
>                         Kind regards,
>                         Luca Boccassi
>                         _______________________________________________
>                         zeromq-dev mailing list
>                         zeromq-dev at lists.zeromq.org
>                         http://lists.zeromq.org/mailman/listinfo/zeromq-dev
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20161204/967eff98/attachment.sig>


More information about the zeromq-dev mailing list