Better exception handling in the analyzer

Give the ability to continue creating a PEL with FFDC if there is an
exception in the analysis portion of the analyzer.

Signed-off-by: Zane Shelley <zshelle@us.ibm.com>
Change-Id: I2de281a7c974cfc80779a861a12cb2b9c99e0491
diff --git a/analyzer/analyzer_main.cpp b/analyzer/analyzer_main.cpp
index 25f7005..b89124e 100644
--- a/analyzer/analyzer_main.cpp
+++ b/analyzer/analyzer_main.cpp
@@ -157,13 +157,27 @@
         {
             if (attnFound)
             {
-                // Resolve the root cause attention.
-                RasDataParser rasData{};
-                rasData.getResolution(rootCause)->resolve(servData);
+                try
+                {
+                    // Resolve the root cause attention.
+                    RasDataParser rasData{};
+                    rasData.getResolution(rootCause)->resolve(servData);
+                }
+                catch (const std::exception& e)
+                {
+                    trace::err("Exception caught during root cause analysis");
+                    trace::err(e.what());
+
+                    // We'll still want to create a PEL for the FFDC, but
+                    // since the analysis failed, we need to callout Level 2
+                    // Support.
+                    servData.calloutProcedure(callout::Procedure::NEXTLVL,
+                                              callout::Priority::HIGH);
+                }
             }
             else
             {
-                // Analysis failed so apply the Level 2 Support resolution.
+                // Analysis failed so callout the Level 2 Support.
                 servData.calloutProcedure(callout::Procedure::NEXTLVL,
                                           callout::Priority::HIGH);
             }