108

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.

Rob Bednark
28.8k28 gold badges90 silver badges131 bronze badges
asked Dec 3, 2018 at 13:28

7 Answers 7

200

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.

answered May 8, 2019 at 10:32
Sign up to request clarification or add additional context in comments.

10 Comments

For unittest, you may also need "request": "test",. doc
Why-o-why can't this be the default... :-(
What about debugging non-standard library functions, i.e., functions inside external libraries installed with pip?
Where to put this?
Did not work for me in the default Python: Current File debug configuration. I had to create a separate debug configuration with "justMyCode": false to get it to work.
|
34

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

answered Aug 23, 2021 at 22:11

1 Comment

Thanks that you took the time to write a complete answer incl. how to init the config file. I am sick and tired of answers that contain only bits an pieces, like "add 'justMyCode' ... somewhere".
8

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"]
 }
]
answered Dec 27, 2022 at 0:20

1 Comment

Thank you for adding "purpose". (hey that reads kinda funny) Without purpose the just my code didn't allow step.
7

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.

answered Dec 3, 2018 at 13:49

3 Comments

Why it did not work a couple of times at first, I do not know.
"debugOptions" has been removed as an option from config file. Instead use "debugStdLib": true
As the other answer suggests the new option is now justMyCode
5

For those using the standard VSCode Debugger, a little more clarification on how to configure this in VS Code might be needed

Create Your Debugger Configuration As Follows

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:

  1. purpose should be set to ["debug-test"]
  2. "justMyCode": should be set to false.

References: Official VSCode Docs

answered Nov 10, 2022 at 17:02

Comments

5

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" }
 }
 ]
}
answered Jun 22, 2023 at 7:13

Comments

4

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"]
 }
 ]
 }
answered May 6, 2022 at 13:46

5 Comments

My hero! Strangely stops once in tests/__init__.py every time, but otherwise works perfectly. I removed the externalTerminal line.
Just put "stopOnEntry" to false to prevent this behaviour
Hi. Can I do this on a default test explorer?
Not sure, this answer has been determined by reading the doc of the specific test explorer (marketplace.visualstudio.com/…). For other test explorer, you either need to try or read the doc related to your tool.
@Selva I added an answer with some clarification.

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.