I have a windows service with the following code
AppDomain.CurrentDomain.FirstChanceException += CurrentDomain_FirstChanceException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
private static void CurrentDomain_FirstChanceException(object sender, System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs e)
{
if (e.Exception == null)
return;
LogException(e.Exception, "FirstChance Exception ");
}
public void Test()
{
Task.Factory.StartNew(x =>
{
foreach(item in blockingCollection.GetConsumingEnumerable())
{
try
{
Convert.ToInt32("Test");
}
catch (Exception ex)
{
}
}
});
}
Inside Test method catch I can see full stack trace
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Convert.ToInt32(String value)
at Test.TestService.<QueueConsumer>b__11_0(Object x) in C:\SourceControl\TestProject.Risk\Application\TestService.cs:line 157
whereas in private static void CurrentDomain_FirstChanceException
I see incomplete stacktrace
System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
If I remove try{}catch{}
CurrentDomain_UnhandledException event is not fired
I want to avoid try{}catch{} just to log the exception. How can I get the complete stacktrace in the first chance exception?