Line numbers in stack traces
Richard A. O'Keefe
Wed Aug 10 03:09:45 CEST 2005
The [Erlang] virtual machine has no information about line numbers.
David Hopwood <> asked
Isn't that a design limitation of the virtual machine code format?
I think language VMs should be designed to allow this at least in a
There are a number of assumptions hidden here:
(1) all VM code comes from source code
(2) all source code is hand-written
(3) therefore all VM code *has* line numbers
which it is simply incompetent of the VM not to retain.
(4) the relationship between source lines and VM code is easy to maintain.
Since Erlang/OTP provides several ways to generate and manipulate source
code, (1) and (2) are false. Even in C, macros place serious limits on
the utility of line numbers: a single "function call" in a line may
expand to hundreds of tokens which cannot be stepped into, and the line
where the error *is* may be in a completely different file from the
reported line. Erlang macros are regrettably similar to C macros.
Then we mustn't forget things like YECC and code generators like ASN.1
(see 'asn1') and CORBA interfaces (see 'ic').
While this is not yet a major consideration for Erlang, consider the
fact that compilers for functional programming languages tend to do
*major* restructuring, starting with in-line expansion, simplification,
reordering, and progressing to things like deforestation (which is
certainly applicable to Erlang). The practical consequence of this is
that a few bytes of code (BEAM or other VM or HiPE-generated native
code) may contain bits of many different functions, so that line number
information would overwhelm actual useful code.
I'd rather see a QuickCheck for Erlang; is there one?
More information about the erlang-questions