Sometimes code in Scheme may fail and output a backtrace looking out something like this:
Backtrace: In unknown file: ?: 19 [apply-smob/1 #<catch-closure 55e36cf0a020>] In ice-9/boot-9.scm: 66: 18 [call-with-prompt prompt0 ...] ... many more lines ... In ice-9/boot-9.scm: 105: 1 [#<procedure 55e36e0eee80 at ice-9/boot-9.scm:100:6 (thrown-k . args)> wrong-type-arg ...] In unknown file: ?: 0 [apply-smob/1 #<catch-closure 55e36e0edae0> wrong-type-arg ...] ERROR: In procedure apply-smob/1: ERROR: In procedure struct-vtable: Wrong type argument in position 1 (expecting struct): #f
The output is incomprehensible, isn’t it? The issue gets worse due to abbreviation of the output, look at the ellipses in some of the lines.
The length of the output lines depends on the environment variable
COLUMNS
set in your environment. Sometimes you can improve
readability of such errors by setting the variable to a bigger value.
For instance, if you launch your program in terminal, do:
echo $COLUMNS -| 106 export COLUMNS=1000 lepton-schematic
You can do it in your Scheme code as well:
(setenv "COLUMNS" "1000")
Sometimes you have to find the code you could insert such a line in. For example, the code of Lepton Scheme unit tests contains this line in unit-test.scm, though it is commented out as this is unnecessary in most cases.
Another approach is using of interactive mode of Guile or one of
Lepton tools to debug your code. Load your modules or files with code
in this mode one by one and see what’s wrong with them.
lepton-netlist
and lepton-symcheck
support this.
If you want to debug some particular module, you could use your
current Lepton installation. Say, if your Lepton is installed in
/usr/local/, run guile
and in its prompt do:
(add-to-load-path "/usr/local/share/lepton-eda/scheme") (use-modules (lepton m4))
This is how all Lepton tools are initialized internally. The first
line adds path to all Lepton modules. The module (lepton m4)
is loaded then for initialization of various liblepton
’s
variables. After that, you’ll be able to play with Lepton modules.
To automate the above trick, you might want to add the two lines in
your local guile
configuration file, typically,
~/.guile.