Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Error handling SBCL是否绕过调试器并在其他环境中显示打印错误?_Error Handling_Runtime Error_Common Lisp_Sbcl - Fatal编程技术网

Error handling SBCL是否绕过调试器并在其他环境中显示打印错误?

Error handling SBCL是否绕过调试器并在其他环境中显示打印错误?,error-handling,runtime-error,common-lisp,sbcl,Error Handling,Runtime Error,Common Lisp,Sbcl,我通过环境MaxMSP的shell命令控制SBCL 通常我的命令是: sbcl—core some/path/to/a/.core/file—script my/script/generated/in/max 除了发生错误外,一切都很顺利。。。 在这种情况下,我没有得到任何结果,也没有办法知道出了什么问题,除了在终端中计算同一个命令,SBCL调试器显示在那里 是否有一种方法可以仅禁用此评估的调试器(通常在遇到错误时放弃),然后“回显”错误的实际内容 通常用于获取表示以下内容的实际字符串 “价值

我通过环境MaxMSP的shell命令控制SBCL

通常我的命令是: sbcl—core some/path/to/a/.core/file—script my/script/generated/in/max

除了发生错误外,一切都很顺利。。。 在这种情况下,我没有得到任何结果,也没有办法知道出了什么问题,除了在终端中计算同一个命令,SBCL调试器显示在那里

是否有一种方法可以仅禁用此评估的调试器(通常在遇到错误时放弃),然后“回显”错误的实际内容

通常用于获取表示以下内容的实际字符串 “价值 “托托 他不是那种人 数 当绑定SB-KERNEL::X“时,我可以直接从Max看到它,然后转到终端

谢谢你的帮助! 最好的

朱利安

我试着在我的命令上添加非交互式的,这很有帮助,但这绝对不是我需要的

似乎我应该以某种方式使用调试io,但我不确定如何访问其内容:(

您可以尝试使用:

如果希望在脚本中使用,则代码几乎相同:


这就是问题所在,我不想定义我自己的错误消息,我想检索Lisp本身生成的错误消息,你知道一种方法吗?如果有关于MaxMSP的公共文档,我很乐意阅读。但是如果你直接写一些东西来查询io,会发生什么?如果一个简单的打印将文本发送到GUI widhget,那么你就可以你只需要用一个处理程序案例来包装你的代码,以捕获任何错误并将其打印到该流中。你有关于MaxMSP如何工作的更多信息吗?它看起来很有趣。是的,它都有文档记录,但可能不值得你深入研究,它是专门为音乐家开发的专有软件(可视化编程)。有一个“外壳”第三方对象,可以用来与mac的终端进行某种程度的交互-我想这是某种模拟。但我不使用它的实际结果:我使用它评估脚本,在脚本中调用SBCL并将其自身的结果写入临时文件(打开文件等)。但是,似乎每当发生错误时,SBCL调试器都会中断所有操作,而不会真正“打印”它。查询io对此没有帮助。假设shell是这样,看起来您只能与stdout和stderr流通信结果,这与Lisp中的标准输出和错误输出相对应。您可能需要捕获所有错误(请参阅)并将其记录到错误输出,然后退出。哇,谢谢,你成功了!实际上我(在我的级别)不确定在你建议的Seibel一章之后如何捕获这些错误。但你真的让我走上了正确的道路:Bernstein的对象中有一个小帮助文件,解释了如何将错误输出附加到Max打印结果中的标准输出。它不是非常干净,但我设法从调试器中过滤了我不需要的所有内容,并分离出我需要的错误字符串。再次非常感谢!最好的,Julien
$ echo '(error "Oh no")' > script.lisp 
$ sbcl --disable-debugger --load $PWD/script.lisp 
This is SBCL 1.5.2.33-d415e2949, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.
While evaluating the form starting at line 1, column 0
  of #P"/tmp/script.lisp":
Unhandled SIMPLE-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING
                                    {10005C85B3}>:
  Oh no

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {10005C85B3}>
0: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<SIMPLE-ERROR "Oh no" {1003643C33}> #<unused argument> :QUIT T)
1: (SB-DEBUG::RUN-HOOK *INVOKE-DEBUGGER-HOOK* #<SIMPLE-ERROR "Oh no" {1003643C33}>)
2: (INVOKE-DEBUGGER #<SIMPLE-ERROR "Oh no" {1003643C33}>)
3: (ERROR "Oh no")
4: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ERROR "Oh no") #<NULL-LEXENV>)
5: (EVAL-TLF (ERROR "Oh no") 0 NIL)
6: ((LABELS SB-FASL::EVAL-FORM :IN SB-INT:LOAD-AS-SOURCE) (ERROR "Oh no") 0)
7: ((LAMBDA (SB-KERNEL:FORM &KEY :CURRENT-INDEX &ALLOW-OTHER-KEYS) :IN SB-INT:LOAD-AS-SOURCE) (ERROR "Oh no") :CURRENT-INDEX 0)
8: (SB-C::%DO-FORMS-FROM-INFO #<CLOSURE (LAMBDA (SB-KERNEL:FORM &KEY :CURRENT-INDEX &ALLOW-OTHER-KEYS) :IN SB-INT:LOAD-AS-SOURCE) {10036436CB}> #<SB-C::SOURCE-INFO {1003643683}> SB-C::INPUT-ERROR-IN-LOAD)
9: (SB-INT:LOAD-AS-SOURCE #<SB-INT:FORM-TRACKING-STREAM for "file /tmp/script.lisp" {1003641C13}> :VERBOSE NIL :PRINT NIL :CONTEXT "loading")
10: ((FLET SB-FASL::THUNK :IN LOAD))
11: (SB-FASL::CALL-WITH-LOAD-BINDINGS #<CLOSURE (FLET SB-FASL::THUNK :IN LOAD) {7F13FE6777EB}> #<SB-INT:FORM-TRACKING-STREAM for "file /tmp/script.lisp" {1003641C13}>)
12: ((FLET SB-FASL::LOAD-STREAM :IN LOAD) #<SB-INT:FORM-TRACKING-STREAM for "file /tmp/script.lisp" {1003641C13}> NIL)
13: (LOAD #P"/tmp/script.lisp" :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST T :EXTERNAL-FORMAT :DEFAULT)
14: (SB-IMPL::PROCESS-EVAL/LOAD-OPTIONS ((:LOAD . "/tmp/script.lisp")))
15: (SB-IMPL::TOPLEVEL-INIT)
16: ((FLET SB-UNIX::BODY :IN SAVE-LISP-AND-DIE))
17: ((FLET "WITHOUT-INTERRUPTS-BODY-14" :IN SAVE-LISP-AND-DIE))
18: ((LABELS SB-IMPL::RESTART-LISP :IN SAVE-LISP-AND-DIE))
(setf *debugger-hook*
      (lambda (condition old-hook)
        (declare (ignore old-hook))
        (format *error-output*
                 "Caught error: ~a"
                 condition)
        (finish-output *error-output*)
        (sb-ext:quit)))
(handler-case (...main...)
  (condition (c) ...log and quit..))