🐞 Cómo Configurar Debug en VS Code para Python, Java, JavaScript y PHP (Xubuntu 24.04)

⚙️ Una guía paso a paso para tener un entorno de desarrollo moderno
y funcional en VS Code con depuración incluida para los lenguajes
más usados.

📦 Requisitos previos

  • Tener VS Code instalado
  • Tener los lenguajes configurados en tu sistema:
    • ✅ Python 3.x
    • ✅ Java (OpenJDK 17 recomendado)
    • ✅ Node.js (v18 o superior)
    • ✅ PHP (8.2 con Xdebug)
  • Sistema base: Xubuntu 24.04

🐍 Debug en Python

🧩 Extensión necesaria

📦 Python (de Microsoft)

🔧 Configuración launch.json

{
        "type": "debugpy",
        "name": "Python Debugger: Current File",
        "request": "launch",
        "program": "${file}",
        "console": "integratedTerminal"
 },

✅ Uso

  • Abrí un archivo .py
  • Colocá un breakpoint
  • Ejecutá con F5 o desde el menú "Run and Debug"

☕ Debug en Java

🧩 Extensiones necesarias

Java Extension Pack
Language Support for Java (Red Hat)

🔧 Configuración automática

Cuando VS Code detecta un archivo .java con método main(), ofrece configurar automáticamente launch.json.

{
        "type": "java",
        "name": "Java: execute current file",
        "request": "launch",
        "mainClass": "",
        "console": "integratedTerminal",
        "cwd": "${fileDirname}",
        "projectName": "",
        "preLaunchTask": "Compilar Java actual"
      },
      {
        "type": "java",
        "name": "JavaFX: execute current file",
        "request": "launch",
        "mainClass": "",
        "vmArgs": "--module-path /home/anthony/Documentos/xubuntu/javafx-sdk-21.0.6/lib --add-modules javafx.controls,javafx.fxml",
        "console": "integratedTerminal",
        "cwd": "${fileDirname}",
        "projectName": "",
        "preLaunchTask": "Compilar JavaFX actual"
      },

Para usar JavaFx, hay que descargar la biblioteca desde JavaFX


🟨 Debug en JavaScript (Node.js)

🧩 Extensión necesaria

📦 JavaScript Debugger (viene por defecto desde VS Code 2023)

🔧 Configuración launch.json

{
        "type": "node",
        "name": "Node.js: Debug archivo actual",
        "request": "launch",
        "program": "${file}",
        "console": "integratedTerminal"
},

✅ Alternativa con package.json

"scripts": {
  "start": "node archivo.js",
  "debug": "node --inspect-brk archivo.js"
}

Luego corré:

npm run debug

Y conectate desde VS Code con F5.


🐘 Debug en PHP con Xdebug

🧩 Extensión necesaria

📦 PHP Debug de Felix Becker

🔧 Instalar Xdebug

sudo apt install php-xdebug

🔧 Configurar /etc/php/8.2/cli/php.ini

; Xdebug para debug con VS Code
[xdebug]
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_port=9003
xdebug.client_host=127.0.0.1

🔧 Configuración launch.json

{
        "type": "php",
        "name": "Listen for Xdebug (PHP)",
        "request": "launch",
        "port": 9003
    },

✅ Uso

  • Colocá un archivo .php en la ruta del servidor (ej: /home/anthony/server/php/)
  • Colocá un breakpoint
  • Ejecutá con php archivo.php o por navegador
  • Presioná F5 en VS Code

🧪 Consejo final

Podés tener todas las configuraciones en un solo launch.json con varias entradas. Ejemplo:

launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

      {
        "type": "java",
        "name": "Java: execute current file",
        "request": "launch",
        "mainClass": "",
        "console": "integratedTerminal",
        "cwd": "${fileDirname}",
        "projectName": "",
        "preLaunchTask": "Compilar Java actual"
      },
      {
        "type": "java",
        "name": "JavaFX: execute current file",
        "request": "launch",
        "mainClass": "",
        "vmArgs": "--module-path /home/anthony/Documentos/xubuntu/javafx-sdk-21.0.6/lib --add-modules javafx.controls,javafx.fxml",
        "console": "integratedTerminal",
        "cwd": "${fileDirname}",
        "projectName": "",
        "preLaunchTask": "Compilar JavaFX actual"
      },
      {
        "type": "debugpy",
        "name": "Python Debugger: Current File",
        "request": "launch",
        "program": "${file}",
        "console": "integratedTerminal"
      },
      {
        "type": "node",
        "name": "Node.js: Debug archivo actual",
        "request": "launch",
        "program": "${file}",
        "console": "integratedTerminal"
      },
      {
        "type": "php",
        "name": "Listen for Xdebug (PHP)",
        "request": "launch",
        "port": 9003
      },
      {
        "type": "cppdbg",
        "name": "Debug C/C++ (archivo actual)",
        "request": "launch",
        "program": "${fileDirname}/${fileBasenameNoExtension}",
        "args": [],
        "stopAtEntry": false,
        "cwd": "${fileDirname}",
        "environment": [],
        "externalConsole": false,
        "MIMode": "gdb",
        "setupCommands": [
          {
            "description": "Habilitar pretty-printing",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
          }
        ],
        "preLaunchTask": "build actual",
        "miDebuggerPath": "/usr/bin/gdb"
      }
    ]
}

tasks.json

{
    "version": "2.0.0",
    "tasks": [
      {
        "type": "shell",
        "label": "build actual",
        "command": "sh",
        "args": [
          "-c",
          "ext=\"${1##*.}\"; if [ \"$ext\" = \"c\" ]; then gcc -g \"$1\" -o \"$2\"; elif [ \"$ext\" = \"cpp\" ]; then g++ -g \"$1\" -o \"$2\"; fi",
          "--",
          "${file}",
          "${fileDirname}/${fileBasenameNoExtension}"
        ],
        "problemMatcher": ["$gcc"],  // gcc problem matcher
        "group": {   // group for build tasks
          "kind": "build",  // build group or Test group
          "isDefault": true  // default build task
        }
      },
      {
        "label": "Compilar Java actual",
        "type": "shell",
        "command": "javac",
        "args": [
          "${file}"
        ],
        "options": {
          "cwd": "${workspaceFolder}/Java"
        },
        "group": "build",
        "problemMatcher": []
      },
      {
        "label": "Compilar JavaFX actual",
        "type": "shell",
        "command": "javac",
        "args": [
          "--module-path",
          "/home/anthony/Documentos/xubuntu/javafx-sdk-21.0.6/lib",
          "--add-modules",
          "javafx.controls,javafx.fxml",
          "${file}"

        ],
        "options": {
          "cwd": "${fileDirname}"
        },
        "group": "build",
        "problemMatcher": []
      }
    ]

  }

settings.json

{
    "java.project.referencedLibraries": [
      "/home/anthony/Documentos/xubuntu/javafx-sdk-21.0.6/lib/**/*.jar"
    ],
    "java.project.sourcePaths": [
      "Java"
    ],
    "java.configuration.runtimes": [
      {
        "name": "JavaSE-21",
        "path": "/usr/lib/jvm/java-21-openjdk-amd64",
        "default": true
      }
    ]
  }

🎯 Conclusión

VS Code te permite trabajar de forma profesional en múltiples lenguajes con una sola herramienta. Tener configurado el debugger te da una ventaja enorme para aprender y desarrollar mejor.

✍️ Escribí, rompé, debugueá... y aprendé!