Re: Debugger : Can't see local variables when stepping

Jacek Podkanski via Sbcl-help <[email protected]>
Newsgroups gmane.lisp.steel-bank.general
Message-ID <CAE9ibtpTbKuCuuoVAciSms3Z2B-Uca2uyaZvdbUZcU2ZRFDdTA@mail.gmail.com>
I have a crude solution to this problem. Please contact me to discuss my
Emacs solution.

I may need to prepare a Youtube video.

When I do step debugging, I can press i for inspecting with a default value
that Emacs thinks I want to inspect. I can edit that, so I clear the whole
value, type* and press Tab. That gives me autocompletion of all the global
variables; I can pick the one I want and inspect it.

On Mon, 18 Mar 2024 at 12:54, Jérôme Radix <[email protected]> wrote:

> Thanks Martin.
>
> It works when using (BREAK) after declaring local variables.
> But does that mean that stepping through code using the debugger can't
> show new local variables declared after (BREAK) ?
> How can I have my local variables automatically detected/shown when
> stepping through code using the debugger, like in other languages debuggers?
>
> Regards,
> Jérôme.
>
>
> Le lun. 18 mars 2024 à 11:25, eMko <[email protected]> a écrit :
>
>> Hi,
>>
>> if you put `(break)` into the `let` form, you will be able to see the
>> variable (tested with SBCL 2.4.1 on Windows, the Roswell build).
>>
>> (defun foo (var1)
>>   (let ((var2 (subseq var1 0 10)))
>>     (break)
>>     (dotimes (i 10 (fresh-line))
>>       (format t "~C" (char var2 i)))))
>>
>> SLY:
>>
>> break
>>    [Condition of type SIMPLE-CONDITION]
>>
>> Restarts:
>>  0: [CONTINUE] Return from BREAK.
>>  1: [RETRY] Retry SLY mREPL evaluation request.
>>  2: [*ABORT] Return to SLY's top level.
>>  3: [ABORT] abort thread (#<THREAD "sly-channel-1-mrepl-remote-1" RUNNING
>> {1001160003}>)
>>
>> Backtrace:
>>  0: (FOO "hello world")
>>       Locals:
>>         VAR1 = "hello world"
>>         VAR2 = "hello worl"
>>
>> Hope that helps.
>>
>> Martin
>>
>> On Mon, Mar 18, 2024 at 10:25 AM Jérôme Radix <[email protected]>
>> wrote:
>>
>>> Hello,
>>>
>>> When using the debugger, I can't figure out how to see the value of I
>>> and VAR2 in my little test code, even with (debug 3) optimization setting:
>>> (defun foo (var1)
>>>   (break)
>>>   (let ((var2 (subseq var1 0 10)))
>>>     (dotimes (i 10 (fresh-line))
>>>       (format t "~C" (char var2 i)))))
>>>
>>> (foo "Hello World")
>>>
>>> Here is the transcript of my session, on linux
>>> 5.15.146.1-microsoft-standard-WSL2:
>>>
>>> $ sbcl --no-sysinit --no-userinit
>>> This is SBCL 2.3.4, 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.
>>> * (declaim (optimize (debug 3)))
>>> NIL
>>> * (sb-ext:describe-compiler-policy)
>>>   Basic qualities:
>>> COMPILATION-SPEED = 1
>>> DEBUG = 3
>>> SAFETY = 1
>>> SPACE = 1
>>> SPEED = 1
>>> INHIBIT-WARNINGS = 1
>>>   Dependent qualities:
>>> SB-C::CHECK-CONSTANT-MODIFICATION = 1 -> 1 (maybe)
>>> SB-C::TYPE-CHECK = 1 -> 3 (full)
>>> SB-C::LET-CONVERSION = 1 -> 0 (off)
>>> SB-C:ALIEN-FUNCALL-SAVES-FP-AND-PC = 1 -> 3 (yes)
>>> SB-C:VERIFY-ARG-COUNT = 1 -> 3 (yes)
>>> SB-C::INSERT-DEBUG-CATCH = 1 -> 3 (yes)
>>> SB-C::RECOGNIZE-SELF-CALLS = 1 -> 0 (no)
>>> SB-C::FLOAT-ACCURACY = 1 -> 3 (full)
>>> SB-C:INSERT-STEP-CONDITIONS = 1 -> 3 (full)
>>> SB-C::COMPUTE-DEBUG-FUN = 1 -> 3 (yes)
>>> SB-C:STORE-SOURCE-FORM = 1 -> 3 (yes)
>>> SB-C::PRESERVE-SINGLE-USE-DEBUG-VARIABLES = 1 -> 3 (yes)
>>> SB-C::PRESERVE-CONSTANTS = 1 -> 0 (no)
>>> SB-C:INSERT-ARRAY-BOUNDS-CHECKS = 1 -> 3 (yes)
>>> SB-C::AREF-TRAPPING = 1 -> 0 (no)
>>> SB-C::STORE-XREF-DATA = 1 -> 3 (yes)
>>> SB-C:STORE-COVERAGE-DATA = 1 -> 0 (no)
>>> SB-C:INSTRUMENT-CONSING = 1 -> 1 (no)
>>> SB-C::STORE-CLOSURE-DEBUG-POINTER = 1 -> 0 (no)
>>> * (defun foo (var1)
>>>   (break)
>>>   (let ((var2 (subseq var1 0 10)))
>>>     (dotimes (i 10 (fresh-line))
>>>       (format t "~C" (char var2 i)))))
>>> FOO
>>> * (foo "Hello World")
>>>
>>> debugger invoked on a SIMPLE-CONDITION in thread
>>> #<THREAD tid=1590 "main thread" RUNNING {1001090003}>:
>>>   break
>>>
>>> Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
>>>
>>> restarts (invokable by number or by possibly-abbreviated name):
>>>   0: [CONTINUE] Return from BREAK.
>>>   1: [ABORT   ] Exit debugger, returning to top level.
>>>
>>> (FOO "Hello World")
>>>    source: (BREAK)
>>> 0] start
>>> ; Evaluating call:
>>> ;   (SUBSEQ VAR1 0 10)
>>> ; With arguments:
>>> ;   "Hello World"
>>> ;   0
>>> ;   10
>>>
>>> 1] step
>>> ; (SUBSEQ VAR1 0 10) => "Hello Worl"
>>> ; Evaluating call:
>>> ;   (+ I 1)
>>> ; With unknown arguments
>>> H
>>> 0] step
>>> ; Evaluating call:
>>> ;   (+ I 1)
>>> ; With unknown arguments
>>> e
>>> 0] L
>>> VAR1  =  "Hello World"
>>>
>>> ==> I want to see the value of I and VAR2. What am I doing wrong ?
>>> I've tried several combinations of (declaim (optimize (debug 3) (space
>>> 0) (safety 3) (speed 0))) with no difference in behavior.
>>>
>>> Thanks for your help.
>>>
>>> Regards,
>>> Jérôme.
>>> _______________________________________________
>>> Sbcl-help mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/sbcl-help
>>>
>> _______________________________________________
> Sbcl-help mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/sbcl-help
>

_______________________________________________
Sbcl-help mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sbcl-help
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.