Open the Project Inspector and look at the packages used.
In some cases LCL may be used indirectly. That is you use Package FooBar, which uses LCL. Then you need to click through... The package graph (menu package) can help.
If an exception is thrown it will be caught. If there is a "range error" in the the LCL thrown it will be caught always.
The LCL may be on top of the stack window, but your code should be further down, and you can select the stackframe with your code.
If the LCL does not have debug info, the debugger still stops. But it will try to auto locate the first frame with debug info. Which then should be your call to the LCL.
----------------------------
index out of range
I assume, such as T....List would throw if called "SomeList[Count+1]"?
If it is a range check error (-Cr) then you need to disable this for the LCL. But then there either is still a bug in your code (same rules as above).
Or a bug in the LCL, which should be reported.
-----------------
To be exact:
If any code (with or without debug info throws an
Exception, then this is caught (well in dynamic libraries it might not, but ...).
And if so, the execution is
always in the RTL. The debugger catches it in the internal fpc function "fpc_raiseException" (or similar).
If possible the debugger adjusts the stack.
Also, if possible the debugger will single step to the next except/finally block. (Win 64 only in Lazarus trunk / fpc experimental SEH for 32 bit, not at all).
------------
You can tell the debugger to ignore exception by class. Eg all EListError exceptions. (but then that includes any EListError thrown by you)