On Friday, 14 September 2018 at 14:34:36 UTC, Josphe Brigmo wrote:
std.file.FileException@C:\D\dmd2\windows\bin\..\..\src\phobos\std\file.d(3153):

It is very annoying when the only error info I have is pointing to code in a library which tells me absolutely nothing about where the error occurs in the in the user code(which is what matters).

It's what matters when the exception is caused by a bug in user code. It's what matters when the exception is caused by something environmental and the operation was a narrow, focused operation directed by user code.

If you have a bug caused by something in the depths of a complex library, the full stacktrace matters.

Surely the call stack can be unrolled to find code that exists in the user code? Or at least display several lines like a trace stack.

They do, I thought? Let me test quickly:

---
void doThrow()
{
    throw new Exception("here!");
}
void main()
{
    try
        doThrow;
    catch (Exception e)
        writeln(e);
}
---

That prints something like:

object.Exception@scratch.d(7): here!
----------------
scratch.d:7 void scratch.doThrow() [0x9d8acd53]
scratch.d:14 _Dmain [0x9d8acd68]

That's a stacktrace.

And if I don't catch the exception, the runtime still gives me a stacktrace.

You do need to include debug symbols to get filenames and line numbers; just compile with -g.

Reply via email to