Thank you. Yet one question^ is it possible to control, what will be in stacktrace.
Because, I have (macro generated) (class base object% (define/public (write stream) (write-value l1 stream field1) (write-value l1 stream field2) (write-value l1 stream field3) ...)) Where l1 -- function, that takes its param and it to bytestream. (class derived base (define/override (write stream) (super write stream))) Then I have in stacktrace (super write stream), and then instantly body of l1. But no string "(write-value l1 stream field2)" where I could see, what field caouse error. Is it possible to add it to stacktrace? Or how Racket decides, what expressions will be in stacktrace? Wed, 17 Sep 2014 14:15:17 -0400 от Marc Burns <[email protected]>: >It's not generally possible to edit the message contained in an >exception. However, you can add information to the program's stack using >continuation marks. Here's an example: > >(define my-cont-mark-key (gensym)) > >(define (parse-item item) > (with-continuation-mark my-cont-mark-key item > ...)) > >(with-handlers > ([exn? (lambda(e) > ((error-display-handler) > (format "Parser exception at item ~a:\n~a" > (first > (continuation-mark-set->list > (exn-continuation-marks e) > my-cont-mark-key)) > (exn-message e)) > e))]) > (parse-item start-item)) > >The exception captures the continuation marks installed when it is >thrown. You can extract the information you added to the stack with >these marks in the exception handler. > >On Wed, Sep 17, 2014 at 08:59:15PM +0400, Roman Klochkov wrote: >> I'm writeing a parser. >> So I want to see in parser exception what happend and when (not only where). >> >> (define (parse-item item) >> ?? ??(with-handlers ([exn? (lambda (e) (raise (struct-copy exn e [message >> (format "At item ~a\n~a" item (exn-message e))])))]) >> ?? ?? ?? ?? ??....)) >> >> But this way I lose all exception types. Is there a way to change exception >> message, saving its type, except long copy/paste like >> (with-handlers ([exn:fail:contract:arity? (raise (struct-copy >> exn:fail:contract:arity ...))] >> ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??[exn:fil:contract? >> (raise??(struct-copy exn:fail:contract ...))] >> ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??...) >> ?? ??...) >> >> ? >> >> -- >> Roman Klochkov > >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users > -- Roman Klochkov
____________________ Racket Users list: http://lists.racket-lang.org/users

