VSCode: come impostare la directory di lavoro per il debug


100

Sto iniziando a usare vscode per Python. Ho un semplice programma di test. Voglio eseguirlo sotto debug e ho bisogno di impostare la directory di lavoro per l'esecuzione.

Come / dove lo faccio?

Risposte:


154

Il commento di @ SpeedCoder5 merita di essere una risposta;

In particolare, è possibile specificare una directory di lavoro dinamica; (ovvero qualsiasi directory in cui si trova il file Python attualmente aperto), utilizzando"cwd": "${fileDirname}"

Se stai usando l' Python: Current File (Integrated Terminal)opzione quando esegui Python, il tuo launch.jsonfile potrebbe apparire come il mio, di seguito.

{
    "version": "0.2.0",
    "configurations": [
    {
            "name": "Python: Current File (Integrated Terminal)",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "cwd": "${fileDirname}"
    }, 

    //... other settings, but I modified the "Current File" setting above ...
}

Ricorda il launch.json file controlla le impostazioni di esecuzione / debug del progetto di codice di Visual Studio ; il mio launch.jsonfile è stato generato automaticamente da VS Code, nella directory del mio attuale "Open Project". Ho appena modificato manualmente il file per aggiungerlo "cwd": "${fileDirname}"come mostrato sopra.

Ricorda il launch.json file potrebbe essere specifico per il tuo progetto o specifico per la tua directory, quindi conferma che stai modificando quello corretto launch.json (vedi commento)

Se non hai un file launch.json file, prova questo :

Per creare un file launch.json, aprire la cartella del progetto in VS Code (File> Apri cartella) e quindi selezionare l'icona Configura ingranaggio sulla barra superiore della vista Debug.


6
Qualche modo per impostarlo come impostazione predefinita per tutte le configurazioni?
Serhiy

1
Assicurati di modificare il file launch.json corretto! Nella mia esperienza VS Code crea una directory .vscode in ogni cartella di progetto che apro. Se ieri hai aperto la cartella genitore / e oggi hai aperto genitore / figlio /, dovrai apportare le modifiche in modo appropriato.
chrisinmtown

1
C'è un altro file simile a launch.json: workspace [x] .code-workspace. Ha una chiave di "avvio". Questa impostazione è simile alle voci launch.json?
Timo

1
Posso impostare la cartella nel terminale sulla cartella in cui era lo script ?. Ad esempio, la mia ultima riga di script per ps1 è set-location foo, voglio che il terminale sia in foo.
Timo

1
Questa risposta non ha funzionato per me, ma questo fatto: stackoverflow.com/a/62331298/65326
Apreche

44

Tutto quello che devi fare è configurare l'impostazione cwd nel file launch.json come segue:

{
    "name": "Python",
    "type": "python",
    "pythonPath":"python", 
    ....
    "cwd": "<Path to the directory>"
    ....
}

Ulteriori informazioni su questo argomento sono disponibili sul sito Web ufficiale della documentazione di VS Code .


Sì, l'ho fatto. Vedo che in realtà è la directory .vscode, quindi penso di dover aggiungere \ .. alla fine, giusto?
user1443098

Sì, modificherà la risposta di conseguenza
Don

18
"cwd": "${fileDirname}"da eseguire nella directory corrente del file open source
SpeedCoder5

16

Questa impostazione mi aiuta:

{
  "type": "node",
  "request": "launch",
  "name": "Launch Program",
  "cwd": "${workspaceFolder}\\app\\js", // set directory here
  "program": "${workspaceFolder}\\app\\js\\server.js", // set start js here
}

12

In alcuni casi, potrebbe essere utile anche impostare PYTHONPATHinsieme a workspaceFolder:

{
    "name": "Python: Current File",
    "type": "python",
    "request": "launch",
    "program": "${file}",
    "console": "integratedTerminal",
    "cwd": "${workspaceFolder}",
    "env": {
        "PYTHONPATH": "${cwd}"
    }
}


3

Sto postando questa configurazione di esempio per le persone che usano TypeScript su Node.js

nel mio progetto i miei file TypeScript del server Node.js si trovano nella cartella Application_ts ei file js compilati vengono generati nella cartella denominata Application

perché quando eseguiamo la nostra applicazione in modalità debug o la avviamo normalmente dovremmo iniziare dalla cartella dell'applicazione che contiene i file js quindi la configurazione seguente esegui il debug dalla cartella principale dove esiste anche la mia applicazione_ts e funziona perfettamente

{
  "version": "0.2.0",
  "configurations": [
    {
        "type": "node",
        "request": "launch",
        "name": "Debug TypeScript in Node.js",
        "program": "${workspaceRoot}\\Application\\app.js",
        "cwd": "${workspaceRoot}\\Application",
        "protocol": "inspector",
        "outFiles": [],
        "sourceMaps": true
    },        
    {
        "type": "node",
        "request": "attach",
        "name": "Attach to Process",
        "port": 5858,
        "outFiles": [],
        "sourceMaps": true
    }
 ]
}

1

È possibile impostare la directory di lavoro corrente per il programma debug utilizzando l' cwdargomento inlaunch.json


Super! Mi ha portato al passaggio successivo. Ora, provando a eseguire effettivamente il programma in debug. ecco il codice: print (os.getcwd ())
user1443098

Super! Mi ha portato al passaggio successivo. Ho una sola riga: print (os.getcwd ()) di cui voglio eseguire il debug. Faccio clic sull'icona di debug (o premo F5), c'è una piccola linea mobile blu sotto il menu a discesa Ambiente. Tuttavia, il mio codice non viene mai eseguito. Immagino che mi manchi qualcosa. Cosa sarebbe quello?
user1443098

dimentica gli ultimi due, ho capito
user1443098

1
La prossima cosa. Usando il suggerimento, sono stato sorpreso di vedere che $ {workspaceRoot} non era effettivamente la root ma la directory .vscode sotto la root. È come previsto? In tal caso, posso impostare cwd su $ {workspaceRoot} \ .. (su Windows comunque)
user1443098

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.