Previous: Invoking the Debugger, Up: Debugger   [Contents][Index]


17.1.8 ¥Ç¥Ð¥Ã¥¬¤ÎÆâÉô

ËÜÀá¤Ç¤Ï¡¢¥Ç¥Ð¥Ã¥¬¤¬ÆâÉôŪ¤Ë»ÈÍѤ¹¤ë´Ø¿ô¤äÊÑ¿ô¤Ë¤Ä¤¤¤Æ½Ò¤Ù¤Þ¤¹¡£

Variable: debugger

¤³¤ÎÊÑ¿ô¤ÎÃͤϡ¢¥Ç¥Ð¥Ã¥¬¤òµ¯Æ°¤¹¤ë¤¿¤á¤Ë¸Æ¤Ó½Ð¤¹´Ø¿ô¤Ç¤¢¤ë¡£ ¤½¤ÎÃͤϡ¢²ÄÊѸĿô¤Î°ú¿ô¤ò¼è¤ë´Ø¿ô¡Ê¤¢¤ë¤¤¤Ïŵ·¿Åª¤Ë¤Ï´Ø¿ô̾¡Ë¤Ç¤¢¤ë¤³¤È¡£ ¤½¤Î´Ø¿ô¤Ç¤Ê¤ó¤é¤«¤Î¥Ç¥Ð¥Ã¥¬¤ËÆþ¤ë¤È²¾Äꤹ¤ë¡£ ¤³¤ÎÊÑ¿ô¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤÏdebug¡£

Lisp¤¬´Ø¿ô¤ËÅϤ¹ºÇ½é¤Î°ú¿ô¤Ç¡¢¸Æ¤Ó½Ð¤·¤¿Íýͳ¤òɽ¤¹¡£ °ú¿ô¤Îµ¬Ìó¤Ïdebug¤Ëµ­½Ò¤·¤Æ¤¢¤ë¡£

¥³¥Þ¥ó¥É: backtrace

¤³¤Î´Ø¿ô¤Ï¡¢¸½ºß³èÀ­¤ÊLisp´Ø¿ô¸Æ¤Ó½Ð¤·¤Î¥È¥ì¡¼¥¹¤òɽ¼¨¤¹¤ë¡£ ¤³¤ì¤Ï¡¢debug¤¬¥Ð¥Ã¥Õ¥¡‘*Backtrace*’¤ò Ëþ¤¿¤¹¤¿¤á¤ËÍѤ¤¤ë´Ø¿ô¤Ç¤¢¤ë¡£ ¤É¤Î´Ø¿ô¸Æ¤Ó½Ð¤·¤¬³èÀ­¤Ç¤¢¤ë¤«¤ò ȽÃǤ¹¤ë¤¿¤á¤Ë¥¹¥¿¥Ã¥¯¤ò»²¾È¤¹¤ëɬÍפ¬¤¢¤ë¤¿¤áC¤Ç½ñ¤¤¤Æ¤¢¤ë¡£ Ìá¤êÃͤϤĤͤËnil¡£

°Ê²¼¤ÎÎã¤Ç¤Ï¡¢Lisp¼°¤ÇÌÀ¼¨Åª¤Ëbacktrace¤ò¸Æ¤Ó½Ð¤¹¡£ ¤³¤ì¤Ë¤è¤ê¡¢¥Ð¥Ã¥¯¥È¥ì¡¼¥¹¤ò¥¹¥È¥ê¡¼¥àstandard-output¤Ë½ÐÎϤ¹¤ë¡£ ¤³¤³¤Ç¤Ï¥Ð¥Ã¥Õ¥¡‘backtrace-output’¤Ë½ÐÎϤ¹¤ë¡£ ¥Ð¥Ã¥¯¥È¥ì¡¼¥¹¤Î³Æ¹Ô¤Ï¡¢1¤Ä¤Î´Ø¿ô¸Æ¤Ó½Ð¤·¤òɽ¤¹¡£ ´Ø¿ô¤Î°ú¿ôÃͤ¹¤Ù¤Æ¤¬È½¤ì¤Ð¤½¤ì¤é¤ò¹Ô¤Ëɽ¼¨¤¹¤ë¡£ ¤½¤ì¤é¤¬·×»»ÅÓÃæ¤Ç¤¢¤ì¤Ð¡¢¤½¤Î»Ý¤ò¹Ô¤Ëɽ¼¨¤¹¤ë¡£ ¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤Î°ú¿ô¤Ï¾Êά¤¹¤ë¡£

(with-output-to-temp-buffer "backtrace-output"
  (let ((var 1))
    (save-excursion
      (setq var (eval '(progn
                         (1+ var)
                         (list 'testing (backtrace))))))))

     ⇒ nil
----------- Buffer: backtrace-output ------------
  backtrace()
  (list ...computing arguments...)
  (progn ...)
  eval((progn (1+ var) (list (quote testing) (backtrace))))
  (setq ...)
  (save-excursion ...)
  (let ...)
  (with-output-to-temp-buffer ...)
  eval-region(1973 2142 #<buffer *scratch*>)
  byte-code("...  for eval-print-last-sexp ...")
  eval-print-last-sexp(nil)
* call-interactively(eval-print-last-sexp)
----------- Buffer: backtrace-output ------------

ʸ»ú‘*’¤Ï¡¢ È´¤±½Ð¤ë¤È¤­¤Ë¥Ç¥Ð¥Ã¥¬¤òµ¯Æ°¤¹¤ë°õ¤¬ÉÕ¤¤¤Æ¤¤¤ë¥Õ¥ì¡¼¥à¤òɽ¤¹¡£

Variable: debug-on-next-call

¤³¤ÎÊÑ¿ô¤¬nil°Ê³°¤Ç¤¢¤ë¤È¡¢ ¤Ä¤®¤Ëeval¡¢apply¡¢funcall¤ò¸Æ¤Ó½Ð¤¹¤Þ¤¨¤Ë ¥Ç¥Ð¥Ã¥¬¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤ò»ØÄꤹ¤ë¡£ ¥Ç¥Ð¥Ã¥¬¤ËÆþ¤ë¤Èdebug-on-next-call¤ònil¤ËÀßÄꤹ¤ë¡£

¥Ç¥Ð¥Ã¥¬¤Î¥³¥Þ¥ó¥Éd¤Ï¡¢¤³¤ÎÊÑ¿ô¤òÀßÄꤹ¤ë¤³¤È¤Çưºî¤¹¤ë¡£

Function: backtrace-debug level flag

¤³¤Î´Ø¿ô¤Ï¡¢level¤Î¿¼¤µ¤Î¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤Ë ÃÍflag¤Ë±þ¤¸¤Æ¥Õ¥ì¡¼¥à¤«¤éÈ´¤±½Ð¤ë¤È¤­¤Î¥Ç¥Ð¥Ã¥¬¸Æ¤Ó½Ð¤·¤Î°õ¤òÉÕ¤±¤ë¡£ flag¤¬nil°Ê³°¤Ç¤¢¤ë¤È¡¢ ¤Î¤Á¤ËÅö³º¥Õ¥ì¡¼¥à¤«¤éÈ´¤±¤ë¤È¥Ç¥Ð¥Ã¥¬¤ËÆþ¤ë¡£ Èó¥í¡¼¥«¥ë¤Êæ½Ð¤ÇÅö³º¥Õ¥ì¡¼¥à¤«¤éÈ´¤±¤ë¤È¤­¤Ë¤â¥Ç¥Ð¥Ã¥¬¤ËÆþ¤ë¡£

¤³¤Î´Ø¿ô¤Ï¥Ç¥Ð¥Ã¥¬¤Î¤ß¤¬»ÈÍѤ¹¤ë¡£

Variable: command-debug-status

¤³¤ÎÊÑ¿ô¤Ï¡¢¸½ºß¤ÎÂÐÏÃŪ¥³¥Þ¥ó¥É¤Î¥Ç¥Ð¥Ã¥°¾õ¶·¤òµ­Ï¿¤¹¤ë¡£ ¥³¥Þ¥ó¥É¤¬ÂÐÏÃŪ¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¤¿¤Ó¤Ë¡¢ ¤³¤ÎÊÑ¿ô¤Ïnil¤Ë«Çû¤µ¤ì¤ë¡£ ¥Ç¥Ð¥Ã¥¬¤Ï¤³¤ÎÊÑ¿ô¤ËÀßÄꤹ¤ë¤³¤È¤Ç¡¢ Ʊ¤¸¥³¥Þ¥ó¥É¤Îµ¯Æ°Ãæ¤Ë¥Ç¥Ð¥Ã¥¬¤¬¾­Í赯ư¤µ¤ì¤¿¾ì¹ç¤ËÈ÷¤¨¤Æ ¾ðÊó¤ò»Ä¤¹¤³¤È¤¬¤Ç¤­¤ë¡£

¥Ç¥Ð¥Ã¥¬¤Ë¤È¤Ã¤Æ¤Ï¡¢Ä̾ï¤Î¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤Ç¤Ï¤Ê¤¯¤³¤ÎÊÑ¿ô¤ò»È¤¦ÍøÅÀ¤Ï¡¢ °Ê¹ß¤Î¥³¥Þ¥ó¥Éµ¯Æ°¤Ë¥Ç¡¼¥¿¤¬·«¤ê±Û¤µ¤Ê¤¤¤³¤È¤Ç¤¢¤ë¡£

Function: backtrace-frame frame-number

´Ø¿ôbacktrace-frame¤Ï¡¢Lisp¥Ç¥Ð¥Ã¥¬¤Ç»È¤¦¤³¤È¤ò°Õ¿Þ¤·¤Æ¤¤¤ë¡£ ¿¼¤µframe-number¤Î¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤Ç¿Ê¹ÔÃæ¤Î·×»»¤Ë´Ø¤¹¤ë¾ðÊó¤òÊÖ¤¹¡£

Åö³º¥Õ¥ì¡¼¥à¤Ç°ú¿ô¤Îɾ²Á¤ò´°Î»¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¡Ê¤¢¤ë¤¤¤Ï¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¡Ë¡¢ ÃͤÏ(nil function arg-forms…)¡£

Åö³º¥Õ¥ì¡¼¥à¤Ç°ú¿ô¤Îɾ²Á¤ò´°Î»¤·´Ø¿ô¤ò¸Æ¤Ó½Ð¤·¤Æ¤¤¤ì¤Ð¡¢ ÃͤÏ(t function arg-values…)¡£

Ìá¤êÃͤˤª¤¤¤Æ¡¢function¤Ïɾ²Á¤·¤¿¥ê¥¹¥È¤ÎCAR¤Ç¤¢¤ë¤«¡¢ ¥Þ¥¯¥í¸Æ¤Ó½Ð¤·¤Ç¤Ïlambda¼°¤Ç¤¢¤ë¡£ ´Ø¿ô¤Ë°ú¿ô&rest¤¬¤¢¤ì¤Ð¡¢¥ê¥¹¥Èarg-values¤Î»Ä¤ê¤Çɽ¸½¤µ¤ì¤ë¡£

frame-number¤¬Èϰϳ°¤Ç¤¢¤ë¤È¡¢backtrace-frame¤Ïnil¤òÊÖ¤¹¡£