ExceptionReporting.Report(ex) Missing Local Var/Stack Trace

.NET obfuscator and automated error reporting

Moderators: Luke Jefferson, melvyn.harbour, dom.smith

ExceptionReporting.Report(ex) Missing Local Var/Stack Trace

Postby memeDeveloper » Wed Jul 11, 2012 7:01 pm

Hi,

I am trying to report exceptions to smart assembly. I have a method in my application which is called whenever an exception occur. I want to add error reporting in that method. I have used this ExceptionReporting.Report(ex) in my method. Now, whenever I want to report some exception or any other exception is thrown that method gets called and it has that line of code. However, in the reports , the local variables and the stack trace are missing. In the wiki page of the SDK this is mentioned at the end of the page in the Misc section regarding my situation:

"If you want to manually send an exception to SmartAssembly's UnhandledExceptionHandler, you may use the method:

SmartAssembly.ReportException.ExceptionReporting.Report(System.Exception exception)

Note that the local variables and the stack trace are missing for the method which called Report. A workaround is to wrap the whole method up in a delegate or empty method."

Can someone show me an example for this workaround ?
memeDeveloper
 
Posts: 17
Joined: Fri Jun 22, 2012 7:49 pm

Postby Brian Donahue » Thu Jul 12, 2012 1:22 pm

Hello,

The first method is pretty self-explanatory. Create a new method and call the original method from it. If you are building a DLL, you may want to rename the methods so the entry point names are preserved.
Code: Select all
DoSomething()
{
     OriginalDoSomething();
}
OriginalDoSomething()
{
    try {
       Something();
          }
    catch (Exception exc)
          {
              ExceptionReporting.Report(exc);
           }
}

EDIT: The above solution has been proven not to work.
Solution number 2 involves creating a delegate:
Code: Select all
using System;
using SmartAssembly.ReportException;

namespace delegateexample
{
    class Program
    {
        static void Main(string[] args)
        {
            ErrorHandling.DoWithErrorHandling(delegate
            {
                OriginalDoSomething();
            }
            );
            Console.ReadLine();
        }

        private static void OriginalDoSomething()
        {
            /* your original code */
        }
    }
    // Delegate needs to be typed for DoWithErrorHandling...
    public delegate void DoSomethingDelegate();
    /// <summary>
    /// This class will invoke the code specified in the delegate and report exceptions to SA
    /// </summary>
   
    class ErrorHandling
        {
            public static void DoWithErrorHandling(DoSomethingDelegate toDo)
            {
                try
                {
                    toDo();
                }
                catch (Exception e)
                {
                    ExceptionReporting.Report(e);
                }
            }
        }
}

In this way, you create a new class to invoke the code and trap any errors. You can wrap any code for which you want to report exceptions into the DoWithErrorHandling method.
Brian Donahue
 
Posts: 6670
Joined: Mon Aug 23, 2004 10:48 am


Return to SmartAssembly 6

Who is online

Users browsing this forum: No registered users and 0 guests