Get StackTrace in Custom Exception

I use a CustomException and can’t get the stack trace to work. I meticulously followed and implemented the Salesforce Developer Guide for Custom Exceptions but my debug log simply shows an empty stack trace.

11:30:40:294 USER_DEBUG [8]|DEBUG|Line number: 22
11:30:40:295 USER_DEBUG [9]|DEBUG|Stack trace: ()

This makes no sense at all. If I catch one of the standard exceptions, I can read that property. Posts in developer boards clearly state, that getStackTraceString() should work on both custom and system exceptions. So why is my debug log different? What am I doing wrong?

Code for Custom Exception:

public class MerchandiseException extends Exception {

}

Code that throws the exception:

public class MerchandiseUtility {
    public static void mainProcessing() {
        try {
            insertMerchandise();
        } catch(MerchandiseException me) {
            System.debug('Message: ' + me.getMessage());    
            System.debug('Cause: ' + me.getCause());    
            System.debug('Line number: ' + me.getLineNumber());    
            System.debug('Stack trace: ' + me.getStackTraceString());    
        }
    }

    public static void insertMerchandise() {
        try {
            // Insert merchandise without required fields
            Lead l = new Lead();
            insert l;
        } catch(DmlException e) {
            // Something happened that prevents the insertion
            // of Employee custom objects, so throw a more
            // specific exception.
            throw new MerchandiseException(
                'Merchandise item could not be inserted.', e);
        }
    }
}

I don’t have a “Merchandise__c” Object, thats why I decided to create a lead object which will throw the exact same DMLException (since LastName is required and not set). If I change the code to re-throw an arbitrary System Exception (i.e. NullPointerException) and catch a generic Exception in the outer try/catch, debug log works flawlessly:

12:11:08:174 USER_DEBUG [8]|DEBUG|Line number: 22
12:11:08:174 USER_DEBUG [9]|DEBUG|Stack trace: Class.MerchandiseUtility.insertMerchandise: line 22, column 1
12:11:08:000 USER_DEBUG Class.MerchandiseUtility.mainProcessing: line 4, column 1
12:11:08:000 USER_DEBUG AnonymousBlock: line 1, column 1
12:11:08:000 USER_DEBUG AnonymousBlock: line 1, column 1

Answer

There is the existing known issue Exception.getStackTraceString() does not work for custom exceptions with Spring’16.

Summary
Exception.getStackTraceString() doesn’t return a string when used in Custom exceptions

Sadly, when it was last updated 2018-10-13 it was marked as “NO FIX”.
No reason is given.

Attribution
Source : Link , Question Author : J. Schreiber , Answer Author : Daniel Ballinger

Leave a Comment