Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Debug File (Ctrl+F5) does not respect working directory in Run configuration #22496

Open
7 of 10 tasks
roteiro opened this issue Sep 12, 2024 · 5 comments
Open
7 of 10 tasks

Comments

@roteiro
Copy link

roteiro commented Sep 12, 2024

Issue Report Checklist

  • Searched the issues page for similar reports
  • Read the relevant sections of the Spyder Troubleshooting Guide and followed its advice
  • Reproduced the issue after updating with conda update spyder (or pip, if not using Anaconda)
  • Could not reproduce inside jupyter qtconsole (if console-related)
  • Tried basic troubleshooting (if a bug/error)
    • Restarted Spyder
    • Reset preferences with spyder --reset
    • Reinstalled the latest version of Anaconda
    • Tried the other applicable steps from the Troubleshooting Guide
  • Completed the Problem Description, Steps to Reproduce and Version sections below

Problem Description

Consider the following project structure of the folder testproject

.
├── .python-version
├── .spyproject
│   └── config
├── .venv
│   ├── .gitignore
│   ├── CACHEDIR.TAG
│   ├── Lib
│   ├── pyvenv.cfg
│   ├── Scripts
│   └── share
├── pyproject.toml
├── README.md
├── scripts
│   └── foo.py
└── uv.lock

The python interpreter is set to path/to/testproject/.venv/Scripts/python.exe. I want to run foo.py from the dir testproject , therefore, i set the following run configuration under Run->Configuration per File
image

Content of foo.py

if __name__ == "__main__":
    print("test")
    raise ValueError

What steps reproduce the problem?

I tried two different ways of running the file:
a) Run foo.py with F5
b) Debug foo.py with Ctrl+F5

What is the expected output? What do you see instead?

a)
I expect to to automatically enter the debugger due to the run configuration and the deliberate ValueError. This basically happens, except for the unexpected *** NameError: name '_pdbcmd_print_frame_status' is not defined

Full output of a)

In [1]: %runfile C:/Users/path/to/testproject/scripts/foo.py --wdir C:/Users/path/to/testproject/testproject --post-mortem
test
Traceback (most recent call last):

  File ~\path\to\testproject\.venv\Lib\site-packages\spyder_kernels\customize\utils.py:209 in exec_encapsulate_locals
    exec_fun(compile(code_ast, filename, "exec"), globals)

  File c:\users\path\to\testproject\testproject\scripts\foo.py:3
    raise ValueError

ValueError

****************************************
Entering post mortem debugging...
****************************************
*** NameError: name '_pdbcmd_print_frame_status' is not defined

IPdb [1]:

b) I expect the execution with the wdir set to the project root and the lauch of the debugger. However, the Working directory settings seem to be ignored for Ctrl+F5, since the working directory is changed to the folder scripts
Full output of b)

In [3]: %debugfile C:/Users/path/to/testprojct/testproject/scripts/foo.py --wdir
*** NameError: name '_pdbcmd_print_frame_status' is not defined

IPdb [1]: 

Bonus Question

Is it correct that at the moment, there is no possibility to set the global run configuration such that the wdir is relative to the currently opened Spyder project?

Versions

  • Spyder version: 6.0.0 (standalone)
  • Python version: Python 3.11.9 64-bit
  • Qt version: Qt 5.15.8
  • PyQt version: PyQt5 5.15.9
  • Operating System name/version: Windows 10 (AMD64)

Dependencies

# Mandatory:
aiohttp >=3.9.3                  :  3.10.5 (OK)
asyncssh >=2.14.0,<3.0.0         :  2.17.0 (OK)
atomicwrites >=1.2.0             :  1.4.1 (OK)
chardet >=2.0.0                  :  5.2.0 (OK)
cloudpickle >=0.5.0              :  3.0.0 (OK)
cookiecutter >=1.6.0             :  2.6.0 (OK)
diff_match_patch >=20181111      :  20230430 (OK)
github >=2.3.0                   :  2.4.0 (OK)
importlib_metadata >=4.6.0       :  8.4.0 (OK)
intervaltree >=3.0.2             :  3.1.0 (OK)
IPython >=8.13.0,<9.0.0,!=8.17.1 :  8.27.0 (OK)
jedi >=0.17.2,<0.20.0            :  0.19.1 (OK)
jellyfish >=0.7                  :  1.1.0 (OK)
jsonschema >=3.2.0               :  4.23.0 (OK)
keyring >=17.0.0                 :  25.3.0 (OK)
nbconvert >=4.0                  :  7.16.4 (OK)
numpydoc >=0.6.0                 :  1.8.0 (OK)
parso >=0.7.0,<0.9.0             :  0.8.4 (OK)
pexpect >=4.4.0                  :  4.9.0 (OK)
pickleshare >=0.4                :  0.7.5 (OK)
psutil >=5.3                     :  6.0.0 (OK)
pygments >=2.0                   :  2.18.0 (OK)
pylint >=3.1,<4                  :  3.2.7 (OK)
pylint_venv >=3.0.2              :  3.0.3 (OK)
pyls_spyder >=0.4.0              :  0.4.0 (OK)
pylsp >=1.12.0,<1.13.0           :  1.12.0 (OK)
pylsp_black >=2.0.0,<3.0.0       :  2.0.0 (OK)
pyuca >=1.2                      :  1.2 (OK)
qdarkstyle >=3.2.0,<3.3.0        :  3.2.3 (OK)
qstylizer >=0.2.2                :  0.2.3 (OK)
qtawesome >=1.3.1,<1.4.0         :  1.3.1 (OK)
qtconsole >=5.6.0,<5.7.0         :  5.6.0 (OK)
qtpy >=2.4.0                     :  2.4.1 (OK)
rtree >=0.9.7                    :  1.3.0 (OK)
setuptools >=49.6.0              :  73.0.1 (OK)
sphinx >=0.6.6                   :  8.0.2 (OK)
spyder_kernels >=3.0.0,<3.1.0    :  3.0.0 (OK)
superqt >=0.6.2,<1.0.0           :  0.6.7 (OK)
textdistance >=4.2.0             :  4.6.2 (OK)
three_merge >=0.1.1              :  0.1.1 (OK)
watchdog >=0.10.3                :  5.0.1 (OK)
yarl >=1.9.4                     :  1.9.7 (OK)
zmq >=24.0.0                     :  26.2.0 (OK)

# Optional:
cython >=0.21                    :  3.0.11 (OK)
matplotlib >=3.0.0               :  3.9.2 (OK)
numpy >=1.7                      :  2.1.0 (OK)
pandas >=1.1.1                   :  2.2.2 (OK)
scipy >=0.17.0                   :  1.14.1 (OK)
sympy >=0.7.3                    :  1.13.2 (OK)

@glindstr
Copy link

I'm experiencing the same issue. "Debug File (Ctrl+F5)" ignores all working directory settings. I have a local module and when I try to debug the module the working directory immediately changes to that of the module where I want it to stay at the currently working directory. "Run (F5)" works as intended as set in the configuration. I'm unable to debug local modules in Spyder 6. This is an issue in 6.0.0 and 6.0.1.

@mvillion
Copy link
Contributor

mvillion commented Oct 1, 2024

Same issue, "command line options" are ignored when using the Debugger.
If I use Run file (F5) with "run this file in:" Debugger, debugger starts with command line options but the breakpoints are ignored.
If I use Debug file (Ctrl-F5), debugger starts, breakpoints work but command line options are ignored.

I cannot debug with command line options.

@dalthviz
Copy link
Member

dalthviz commented Oct 1, 2024

Hi @roteiro thank you for the report! Checking seems like the *** NameError: name '_pdbcmd_print_frame_status' is not defined is related with #22500 . Related with the working directory config/settings what do you think @ccordoba12 @impact27 ? I think for the moment, as a workaround, you should be able to run manually the debugfile magic and provide the appropiate working dir running something like %debugfile <file path> --wdir <working dir path> (maybe that could help you too @mvillion and @glindstr)

Is it correct that at the moment, there is no possibility to set the global run configuration such that the wdir is relative to the currently opened Spyder project?

I would say no, sorry :/ the closes thing you could do currently is to set the global config to use the Working directory settings > The current working directory. Then when you have a project loaded the project path will be used as the current working directory and, if you want to use a specific path inside the project, manually change the working dir using the working directory toolbar. However, is there something else that could be done currently for something like that @ccordoba12 ?

@ccordoba12
Copy link
Member

However, is there something else that could be done currently for something like that?

I think we should pass the working directory to the %debugfile magic, as you pointed out above. It shouldn't be that hard to do.

@ccordoba12 ccordoba12 added this to the v6.0.3 milestone Oct 2, 2024
@dalthviz dalthviz removed their assignment Oct 2, 2024
@mvillion
Copy link
Contributor

mvillion commented Oct 3, 2024

[
These commands were working in Spyder 5:
In [5]: runfile("/home/user/test.py", args="--feat=027b") --> ok
In [6]: debugfile("/home/user/test.py", args="--feat=027b")
UsageError: unrecognized arguments: args=--feat=027b)
]

The suggested workaround is working:
%debugfile /home/user/test.py --args="--feat=027b"
👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants