Reputation: 4353
In a Python project, how do you tell the built-in VSCode debugger to step into the code of functions from other libraries on execution?
I know it is possible for functions implemented in standard libraries by adding a
"debugOptions": ["DebugStdLib"]
to your configuration in launch.json as specified here, however it does not seem to be possible to force the debugger to step into the code of non-standard modules, such as the ones you have written yourself and imported into the current file.
Upvotes: 103
Views: 63813
Reputation: 11704
If you are debuging a Jupyter Notebook, you may want to add to your .vscode/settings.json
. See here.
"jupyter.debugJustMyCode": false
If you use coverage
, you need to deactivate coverage during test debug. Add the following to your launch.json
"env": { "PYTEST_ADDOPTS": "--no-cov" }
Full configuration
// .vscode/settings.json
{
"jupyter.debugJustMyCode": false
}
// .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Debug Tests",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"purpose": ["debug-test"],
"console": "integratedTerminal",
"justMyCode": false,
"env": { "PYTEST_ADDOPTS": "--no-cov" }
}
]
}
Upvotes: 5
Reputation: 759
The configurations in launch.json file as follows work for me.
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "test",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": false,
"purpose": ["debug-in-terminal"]
}
]
Upvotes: 7
Reputation: 3642
For those using the standard VSCode Debugger, a little more clarification on how to configure this in VS Code might be needed
Open up your .vscode/launch.json
Add a configuration {}
to the configurations list:
"configurations": []
This one will be recognized by the built-in VSCode Debugger:
{
"name": "Python: Debug Tests",
"type": "python",
"request": "launch",
"program": "${file}",
"purpose": ["debug-test"],
"console": "integratedTerminal",
"justMyCode": false
}
Key points:
purpose
should be set to ["debug-test"]"justMyCode":
should be set to false.References: Official VSCode Docs
Upvotes: 5
Reputation: 425
Most of the time, I debug unit tests rather than the running application.
If that is also the case on your side and you use:
Then use the following launch.json as mentionned in the plugin page:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug test",
"type": "python",
"request": "attach",
"console": "externalTerminal",
"justMyCode": false,
"stopOnEntry": true,
"envFile": "${workspaceFolder}/.env.test",
"purpose": ["debug-test"]
}
]
}
Upvotes: 4
Reputation: 8131
This is done by customising your debugger.
If you haven't already, you need to initialise the debugger customisation. You can do this by opening the debugger section in the side bar and selecting create a launch.json file
.
Once this is done, a launch.json
file will be created in a .vscode
folder in your workspace.
Edit this file. It will look something like this:
{
...,
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
Add "justMyCode": false
to the "Python: Current File"
configuration, like this:
{
...,
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": false
}
]
}
True as of Visual Studio Code version 1.59.0.
Reference: https://code.visualstudio.com/docs/python/debugging
Upvotes: 31
Reputation: 2016
In order to improve the accepted answer by John Smith, it is worth mentioning that now the option has been renamed again. The new option is
"justMyCode": false
and as per the documentation
When omitted or set to True (the default), restricts debugging to user-written code only. Set to False to also enable debugging of standard library functions.
Upvotes: 187
Reputation: 4353
A debugger configuration with
"debugOptions": ["DebugStdLib"]
added in launch.json in fact will step into user-defined and pip-installed modules, contrary to what's written in the main question.
Upvotes: 7