<div dir="ltr"><div><div><div><div><div><br></div>I used this method:<br><br>(defun print-error-log (eout e)<br>  (format eout "Unhandled error detected: ~%")<br>  (format eout "~A~%" e)<br>  (when (c-code::error-data-p)<br>
    (format eout "Additional error data: ~%~A~%" (c-code::get-error-data)))<br>  (format eout "Backtrace: ~%")<br>  (loop for x from (- (si::ihs-top) 2) downto 1<br>     do<br>       (format eout "~A~%" (si::ihs-fun x))<br>
       (format eout " Args:~%")<br>       (let ((env (si::decode-ihs-env (si::ihs-env x))))<br>     (dolist (ip env)<br>       (format eout "      ~A= ~A~%" (car ip) (cdr ip))))<br>       (format eout "~%"))<br>
  (format eout "~%")<br>  (format eout "C stack: ~%")<br>  (c-code::print-c-stack eout)<br>  (format eout "~%")) <br><br></div>which relies on two c side things, c-code::print-c-stack which is just platform dependent method for printing c stack and <br>
</div>c-code::error-data-p / c-code::get-error-data, which is a c global value accessor (reason why is isn't lisp global value is that <br></div>unfortunately, ecl handles this in separate thread/context, thus every special variable is nil).<br>
<br></div>this method is then used in handler-bind:<br><br>(defun handle-any-error-log (e)<br>  (with-open-file (eout "errors.txt"<br>            :direction :output)<br>    (print-error-log eout e))<br>  (print-error-log *standard-output* e)<br>
  (throw :end-execution-on-error :error-handled))<br><br>(eval-when (:load-toplevel :execute)<br>  (catch :end-execution-on-error<br>    (handler-bind<br>    ((error #'handle-any-error-log))<br>      (post-initialization))))<br>
<br><div><br><br></div><div>Output is pretty nice, imo:<br><br>Unhandled error detected: <br>Thats enough!<br>Backtrace: <br>#<bytecompiled-function UPDATE><br> Args:<br>      DELTA-TIME= 876<br>      SCENE= #<a DEFVN::TEST-SCENE><br>
      WINDOW= #<a CORE:WINDOW><br><br>G26<br> Args:<br>      CORE::W= #<a CORE:WINDOW><br><br>#<bytecompiled-function MAIN><br> Args:<br>      WINDOW= #<a CORE:WINDOW><br><br>#<bytecompiled-function BYTECODES><br>
 Args:<br><br>LOAD-INTERNAL<br> Args:<br>      CORE::LOC-NAME= code/init.lisp<br>      CORE::GLO-NAME= /media/home/home/enerccio/projects/gaia/gaia/pakdata/code/init.lisp<br>      CORE::LISP-FILE= init.lisp<br><br>POST-INITIALIZATION<br>
 Args:<br><br><br>C stack: <br>/media/home/home/enerccio/projects/gaia/gaia/Debug/gaia(c_stack+0x62) [0x4090f2]<br>/media/home/home/enerccio/projects/gaia/gaia/postinit.fas(+0x4f15) [0x7fbec1145f15]<br>/media/home/home/enerccio/projects/gaia/gaia/postinit.fas(+0x4857) [0x7fbec1145857]<br>
/usr/lib/libecl.so.12.12(+0x12eb99) [0x7fbec5129b99]<br>/usr/lib/libecl.so.12.12(+0x12ed88) [0x7fbec5129d88]<br>/usr/lib/libecl.so.12.12(cl_funcall+0x78) [0x7fbec51649e8]<br>/usr/lib/libecl.so.12.12(cl_error+0xd6) [0x7fbec5185406]<br>
/usr/lib/libecl.so.12.12(ecl_interpret+0x1cad) [0x7fbec51671bd]<br>/usr/lib/libecl.so.12.12(cl_apply+0x29b) [0x7fbec5164d2b]<br>/usr/lib/libecl.so.12.12(+0x111ae4) [0x7fbec510cae4]<br>/usr/lib/libecl.so.12.12(+0x117031) [0x7fbec5112031]<br>
/usr/lib/libecl.so.12.12(_ecl_standard_dispatch+0x198) [0x7fbec516fed8]<br>/usr/lib/libecl.so.12.12(cl_funcall+0x78) [0x7fbec51649e8]<br>/media/home/home/enerccio/projects/gaia/gaia/Debug/gaia(render_once+0x128) [0x408d8d]<br>
/media/home/home/enerccio/projects/gaia/gaia/Debug/gaia(start_loop+0x33) [0x408c02]<br>/media/home/home/enerccio/projects/gaia/gaia/Debug/gaia(cl_start_loop+0x25) [0x408c43]<br>/media/home/home/enerccio/projects/gaia/gaia/postinit.fas(+0x3ad2) [0x7fbec1144ad2]<br>
/usr/lib/libecl.so.12.12(cl_apply+0x29b) [0x7fbec5164d2b]<br>/usr/lib/libecl.so.12.12(+0x111ae4) [0x7fbec510cae4]<br>/usr/lib/libecl.so.12.12(+0x117031) [0x7fbec5112031]<br>/usr/lib/libecl.so.12.12(_ecl_standard_dispatch+0x198) [0x7fbec516fed8]<br>
/usr/lib/libecl.so.12.12(ecl_interpret+0x1f97) [0x7fbec51674a7]<br>/usr/lib/libecl.so.12.12(ecl_interpret+0x1ece) [0x7fbec51673de]<br>/usr/lib/libecl.so.12.12(+0x17118f) [0x7fbec516c18f]<br>/usr/lib/libecl.so.12.12(si_eval_with_env+0x2eb) [0x7fbec516dd3b]<br>
/usr/lib/libecl.so.12.12(si_load_source+0x191) [0x7fbec51bce41]<br>/usr/lib/libecl.so.12.12(cl_funcall+0x78) [0x7fbec51649e8]<br>/usr/lib/libecl.so.12.12(cl_load+0x46d) [0x7fbec51bd6bd]<br>/media/home/home/enerccio/projects/gaia/gaia/postinit.fas(+0x5561) [0x7fbec1146561]<br>
/media/home/home/enerccio/projects/gaia/gaia/postinit.fas(+0x599e) [0x7fbec114699e]<br>/media/home/home/enerccio/projects/gaia/gaia/postinit.fas(init_fas_CODE+0x2036) [0x7fbec114e276]<br>/usr/lib/libecl.so.12.12(ecl_init_module+0x409) [0x7fbec5181bb9]<br>
/usr/lib/libecl.so.12.12(si_load_binary+0x9a) [0x7fbec51bcb7a]<br>/usr/lib/libecl.so.12.12(cl_funcall+0x78) [0x7fbec51649e8]<br>/usr/lib/libecl.so.12.12(cl_load+0x46d) [0x7fbec51bd6bd]<br>/media/home/home/enerccio/projects/gaia/gaia/Debug/gaia(init_common_lisp_subsystem+0xf0) [0x40907e]<br>
/media/home/home/enerccio/projects/gaia/gaia/Debug/gaia(main+0x25) [0x408e61]<br>/usr/lib/libc.so.6(__libc_start_main+0xf5) [0x7fbec3e5d725]<br>/media/home/home/enerccio/projects/gaia/gaia/Debug/gaia() [0x403ee9]<br><br></div>
<div>what I don't like is that I can't get fas compiled objects to show c debug symbol names, no matter if I add -fdynamic or not, it will only show init_fas_CODE symbol, <br>and nothing else. Oh well...<br></div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/2/19 Anton Vodonosov <span dir="ltr"><<a href="mailto:avodonosov@yandex.ru" target="_blank">avodonosov@yandex.ru</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
03.02.2013, 05:34, "Peter Enerccio" <<a href="mailto:enerccio@gmail.com">enerccio@gmail.com</a>>:<br>
<div class="im">> I actually got it working, so it was most likely problem on my side. Thanks!<br>
<br>
</div>Could you share your findings? What is the right reciepe for printing backtrace?<br>
</blockquote></div><br><br clear="all"><br>-- <br>Bc. Peter Vaņu¹anik<br><a href="http://www.bishojo.tk" target="_blank">http://www.bishojo.tk</a><br>
</div>