¿Por qué elegir VS Code?¶
Visual Studio Code (VS Code) es un editor de código desarrollado por Microsoft que se ha convertido en el estándar de facto para el desarrollo moderno. Es gratuito, open source, y extremadamente poderoso gracias a su ecosistema de extensiones.
Ventajas principales¶
Gratuito y open source: Sin limitaciones ni costos ocultos
Multiplataforma: Funciona en Linux, Windows y macOS de forma idéntica
Ecosistema de extensiones: Miles de extensiones para cualquier lenguaje o framework
IntelliSense potente: Autocompletado inteligente y sugerencias contextuales
Git integrado: Control de versiones nativo sin herramientas externas
Terminal integrada: Bash, PowerShell o cualquier terminal desde dentro del editor
Debugging avanzado: Depurador visual para múltiples lenguajes
Liveshare: Colaboración en tiempo real con otros desarrolladores
Instalación en diferentes sistemas¶
Linux (Ubuntu/Debian)¶
Método 1: Paquete .deb (recomendado)¶
# Descargar e instalar el paquete oficial
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -o root -g root -m 644 packages.microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt update
sudo apt install codeMétodo 2: Snap (alternativo)¶
sudo snap install --classic codeMétodo 3: AppImage (portable)¶
# Descargar desde el sitio oficial
wget "https://code.visualstudio.com/sha/download?build=stable&os=linux-x64" -O code.AppImage
chmod +x code.AppImage
./code.AppImageLinux (CentOS/RHEL/Fedora)¶
# Agregar repositorio de Microsoft
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
# Instalar
sudo dnf check-update
sudo dnf install code
# O en sistemas más antiguos con yum
sudo yum check-update
sudo yum install codemacOS¶
Método 1: Descarga directa (simple)¶
Visitá code
.visualstudio .com Descargá VS Code para macOS
Abrí el archivo .zip descargado
Arrastrá Visual Studio Code a la carpeta Applications
Método 2: Homebrew (recomendado para desarrolladores)¶
# Instalar con Homebrew
brew install --cask visual-studio-codeWindows¶
Método 1: Instalador oficial¶
Descargá el instalador desde code
.visualstudio .com Ejecutá el archivo .exe descargado
Seguí el asistente de instalación
Importante: Marcá las opciones:
“Add to PATH” (agregar al PATH)
“Register Code as an editor for supported file types”
“Add ‘Open with Code’ action to context menu”
Método 2: Winget (Windows 10/11)¶
winget install Microsoft.VisualStudioCodeMétodo 3: Chocolatey¶
choco install vscodePrimera configuración¶
Verificar instalación¶
# Verificar que VS Code está en el PATH
code --version
# Abrir VS Code desde terminal
code
# Abrir directorio actual en VS Code
code .
# Abrir archivo específico
code mi-archivo.pyConfiguración inicial recomendada¶
Al abrir VS Code por primera vez:
Elegir tema:
Ctrl+Shift+P→ “Preferences: Color Theme”Dark+ (default dark): tema oscuro por defecto
Light+ (default light): tema claro
Monokai: popular tema oscuro
Solarized Dark: tema con colores suaves
Configurar idioma: Si preferís interfaz en español
Ctrl+Shift+P→ “Configure Display Language”Instalar “Spanish Language Pack” si está disponible
Activar autosave:
File→Auto SaveEvita perder trabajo por olvidos
Interfaz y navegación básica¶
Layout principal¶
+-----------------------------------------------------+
| Menu Bar |
+---------┬---------------------------┬---------------+
|Activity | | |
|Bar | Editor Area | Side Panel |
| | | (opcional) |
| | | |
+---------┴---------------------------┴---------------+
| Panel Area |
| (Terminal, Output, etc.) |
+-----------------------------------------------------+
| Status Bar |
+-----------------------------------------------------+Activity Bar (barra lateral izquierda)¶
Explorer (
Ctrl+Shift+E): Navegador de archivos y carpetasSearch (
Ctrl+Shift+F): Búsqueda en todo el proyectoSource Control (
Ctrl+Shift+G): Integración con GitRun and Debug (
Ctrl+Shift+D): DepuradorExtensions (
Ctrl+Shift+X): Gestión de extensiones
Atajos de teclado esenciales¶
Navegación y archivos¶
Ctrl+N # Nuevo archivo
Ctrl+O # Abrir archivo
Ctrl+S # Guardar archivo
Ctrl+Shift+S # Guardar como...
Ctrl+W # Cerrar pestaña actual
Ctrl+Shift+T # Reabrir última pestaña cerrada
Ctrl+Tab # Alternar entre pestañas abiertas
Ctrl+P # Quick Open (buscar archivos)
Ctrl+Shift+P # Command Palette (todos los comandos)Edición¶
Ctrl+Z # Deshacer
Ctrl+Y # Rehacer
Ctrl+X # Cortar línea completa (sin selección)
Ctrl+C # Copiar línea completa (sin selección)
Ctrl+V # Pegar
Ctrl+Shift+K # Eliminar línea
Ctrl+Enter # Insertar línea debajo
Ctrl+Shift+Enter # Insertar línea arriba
Alt+↑/↓ # Mover línea arriba/abajo
Shift+Alt+↑/↓ # Duplicar línea arriba/abajoBúsqueda y reemplazo¶
Ctrl+F # Buscar en archivo actual
Ctrl+H # Buscar y reemplazar
Ctrl+Shift+F # Buscar en todo el proyecto
Ctrl+Shift+H # Reemplazar en todo el proyecto
F3 # Siguiente ocurrencia
Shift+F3 # Ocurrencia anteriorSelección múltiple¶
Ctrl+D # Seleccionar siguiente ocurrencia de palabra
Ctrl+Shift+L # Seleccionar todas las ocurrencias
Alt+Click # Agregar cursor adicional
Ctrl+Alt+↑/↓ # Agregar cursor arriba/abajoExtensiones esenciales¶
Las extensiones son el verdadero poder de VS Code. Acá están las más importantes para comenzar:
Extensiones básicas universales¶
1. Prettier - Code formatter¶
# Instalar desde terminal
code --install-extension esbenp.prettier-vscodeFormateador automático de código
Soporta JavaScript, HTML, CSS, JSON, Markdown y más
Se configura como formateador por defecto
2. GitLens¶
code --install-extension eamodio.gitlensSuperpoderes para Git integrado
Ve quién modificó cada línea y cuándo
Historial de archivos y comparaciones visuales
3. Auto Rename Tag¶
code --install-extension formulahendry.auto-rename-tagRenombra automáticamente tags HTML/XML pareados
Esencial para desarrollo web
4. Bracket Pair Colorizer (integrado desde VS Code 1.60+)¶
Colorea paréntesis, corchetes y llaves pareados
Ayuda a identificar bloques de código rápidamente
5. Live Server¶
code --install-extension ritwickdey.liveserverServidor local con recarga automática
Perfecto para desarrollo web frontend
Extensiones por lenguaje¶
Python¶
code --install-extension ms-python.pythonIntelliSense, linting, debugging para Python
Integración con Jupyter notebooks
JavaScript/TypeScript¶
code --install-extension ms-vscode.vscode-typescript-nextSoporte avanzado para JS/TS (viene integrado)
HTML/CSS¶
code --install-extension ecmel.vscode-html-cssAutocompletado de CSS en archivos HTML
C/C++¶
code --install-extension ms-vscode.cpptoolsIntelliSense, debugging y browsing para C++
Java¶
code --install-extension vscjava.vscode-java-packPack completo para desarrollo Java
Temas y apariencia¶
Temas populares¶
# Tema oscuro muy popular
code --install-extension PKief.material-icon-theme
# Iconos bonitos para archivos
code --install-extension PKief.material-icon-theme
# Tema Dracula
code --install-extension dracula-theme.theme-draculaInstalar extensiones desde interfaz¶
Abrí la vista de extensiones (
Ctrl+Shift+X)Buscá el nombre de la extensión
Hacé click en “Install”
Reiniciá VS Code si es necesario
Configuración y personalización¶
Configuración de usuario vs workspace¶
VS Code tiene dos niveles de configuración:
User Settings: Aplican a todas las instancias de VS Code
Workspace Settings: Solo para el proyecto/carpeta actual
Acceder a configuración¶
# Desde Command Palette
Ctrl+Shift+P → "Preferences: Open Settings"
# O con atajo directo
Ctrl+,Configuraciones esenciales¶
settings.json básico¶
{
// Configuración del editor
"editor.fontSize": 14,
"editor.tabSize": 4,
"editor.insertSpaces": true,
"editor.wordWrap": "on",
"editor.minimap.enabled": true,
"editor.renderWhitespace": "selection",
"editor.formatOnSave": true,
// Configuración de archivos
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 1000,
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
// Terminal integrada
"terminal.integrated.fontSize": 12,
"terminal.integrated.shell.linux": "/bin/bash",
// Git
"git.enableSmartCommit": true,
"git.confirmSync": false,
// Prettier
"editor.defaultFormatter": "esbenp.prettier-vscode",
"prettier.singleQuote": true,
"prettier.semi": true
}Abrir configuración como JSON¶
# Command Palette
Ctrl+Shift+P → "Preferences: Open Settings (JSON)"Snippets personalizados¶
Los snippets son plantillas de código reutilizables.
Crear snippet personalizado¶
Ctrl+Shift+P→ “Preferences: Configure User Snippets”Elegir lenguaje (ej: “html.json”)
Agregar snippet:
{
"HTML5 Boilerplate": {
"prefix": "html5",
"body": [
"<!DOCTYPE html>",
"<html lang=\"es\">",
"<head>",
" <meta charset=\"UTF-8\">",
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
" <title>$1</title>",
"</head>",
"<body>",
" $0",
"</body>",
"</html>"
],
"description": "HTML5 boilerplate básico"
}
}Uso: Escribí html5 y presioná Tab para expandir.
Terminal integrada¶
Una de las características más útiles de VS Code es su terminal integrada.
Usar la terminal¶
# Abrir/cerrar terminal
Ctrl+`
# Nueva terminal
Ctrl+Shift+`
# Alternar entre terminales
Ctrl+PageUp/PageDownConfigurar terminal por defecto¶
En Linux/macOS¶
{
"terminal.integrated.shell.linux": "/bin/bash",
"terminal.integrated.shell.osx": "/bin/zsh"
}En Windows¶
{
"terminal.integrated.shell.windows": "C:\\Windows\\System32\\cmd.exe"
// O para PowerShell:
// "terminal.integrated.shell.windows": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
// O para Git Bash:
// "terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe"
}Integración con Git¶
VS Code tiene integración nativa con Git que facilita enormemente el control de versiones.
Configuración inicial de Git¶
Si no configuraste Git globalmente:
# En la terminal integrada de VS Code
git config --global user.name "Tu Nombre"
git config --global user.email "tu.email@ejemplo.com"Usar Git desde VS Code¶
Inicializar repositorio¶
Abrí carpeta de proyecto (
Ctrl+K Ctrl+O)Vista Source Control (
Ctrl+Shift+G)Click “Initialize Repository”
Hacer commits¶
Modificá archivos (aparecen en Source Control con “M”)
Agregá archivos al staging (click en “+”)
Escribí mensaje de commit
Ctrl+Entero click en “✓” para commit
Funciones avanzadas¶
# Ver diferencias
Click en archivo modificado en Source Control
# Historial de commits
Con GitLens instalado: click en línea → "Git Blame"
# Crear branch
Ctrl+Shift+P → "Git: Create Branch"
# Cambiar branch
Click en nombre de branch en Status BarDebugging (depuración)¶
VS Code incluye un depurador visual potente para múltiples lenguajes.
Configurar debugging¶
Para Python¶
Creá archivo
.vscode/launch.jsonen tu proyecto:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}Para JavaScript (Node.js)¶
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Program",
"type": "node",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}Usar el debugger¶
Poné breakpoints (click izquierda del número de línea)
F5para iniciar debuggingUsar controles:
F5: ContinueF10: Step OverF11: Step IntoShift+F11: Step OutShift+F5: Stop
Flujos de trabajo comunes¶
Desarrollo web básico¶
Estructura de proyecto típica¶
mi-proyecto-web/
+-- index.html
+-- css/
| +-- styles.css
+-- js/
| +-- script.js
+-- images/
+-- logo.pngWorkflow con Live Server¶
Instalá Live Server extension
Abrí tu proyecto en VS Code
Click derecho en
index.html→ “Open with Live Server”El navegador se abre automáticamente
Los cambios se reflejan instantáneamente
Desarrollo Python¶
Setup básico¶
# Crear proyecto Python
mkdir mi-proyecto-python
cd mi-proyecto-python
code .
# Crear entorno virtual
python -m venv venv
# Activar entorno virtual
# Linux/macOS:
source venv/bin/activate
# Windows:
venv\Scripts\activate
# Crear archivo requirements.txt
echo "requests==2.28.1" > requirements.txt
# Instalar dependencias
pip install -r requirements.txtConfiguración de Python en VS Code¶
Ctrl+Shift+P→ “Python: Select Interpreter”Elegir el intérprete del venv
VS Code detecta automáticamente el entorno
Proyecto con Git¶
Setup completo desde cero¶
# Crear directorio y abrir en VS Code
mkdir mi-proyecto
cd mi-proyecto
code .
# Inicializar Git desde terminal integrada
git init
# Crear archivos básicos
touch README.md
echo "node_modules/" > .gitignore
# Hacer primer commit desde Source Control
# 1. Agregar archivos al staging
# 2. Escribir mensaje "Initial commit"
# 3. Commit
# Conectar con GitHub (si tenés repo remoto)
git remote add origin https://github.com/usuario/mi-proyecto.git
git push -u origin mainEjercicios prácticos¶
Ejercicios adicionales para practicar¶
Nivel Básico¶
Familiarización con atajos: Practicá los atajos esenciales creando y editando archivos de texto.
Personalización de tema: Explorá diferentes temas e iconos hasta encontrar tu configuración ideal.
Gestión de extensiones: Instalá y desinstalá diferentes extensiones para entender cómo cambian la funcionalidad.
Nivel Intermedio¶
Multi-cursor editing: Practicá edición con múltiples cursores para modificar varias líneas simultáneamente.
Snippets avanzados: Creá snippets para tu lenguaje favorito con variables y placeholders.
Debugging básico: Configurá el debugger para un proyecto simple y practicá usar breakpoints.
Consejos y trucos avanzados¶
Comandos útiles desde Command Palette¶
# Acceso rápido: Ctrl+Shift+P
"Developer: Reload Window" # Reiniciar VS Code sin cerrar
"Preferences: Open Keyboard Shortcuts" # Personalizar atajos
"View: Toggle Terminal" # Mostrar/ocultar terminal
"Format Document" # Formatear archivo completo
"Transform to Uppercase/Lowercase" # Cambiar case del texto seleccionado
"Sort Lines Ascending" # Ordenar líneas alfabéticamenteNavegación eficiente¶
Ctrl+G # Ir a línea específica
Ctrl+Shift+O # Ir a símbolo en archivo
Ctrl+T # Ir a símbolo en workspace
Ctrl+P # Quick Open (buscar archivos)
Ctrl+R # Abrir workspace reciente
Alt+← / Alt+→ # Navegar historial de archivosEdición avanzada¶
Ctrl+Shift+\ # Ir a paréntesis/bracket de cierre
Ctrl+]/[ # Indentar/desindentar
Ctrl+/ # Comentar/descomentar línea
Shift+Alt+A # Comentar/descomentar bloque
Ctrl+Shift+↑/↓ # Seleccionar líneas arriba/abajo
Ctrl+L # Seleccionar línea completaWorkspace multi-carpeta¶
VS Code permite trabajar con múltiples carpetas en un solo workspace:
File→Add Folder to WorkspaceGuardar workspace:
File→Save Workspace AsEl archivo
.code-workspaceguarda la configuración
Configuración avanzada para C/C++¶
Esta sección cubre la configuración profesional de VS Code para desarrollo en C, incluyendo Language Server Protocol (LSP), compilación integrada y debugging visual.
Instalación de extensiones necesarias¶
Para trabajar con C en VS Code, necesitás instalar estas extensiones fundamentales:
C/C++ (Microsoft) -
ms-vscode.cpptoolsIntelliSense, debugging y navegación de código
Language server oficial de Microsoft
clangd -
llvm-vs-code-extensions.vscode-clangd(alternativa recomendada)Language server más rápido y preciso que el de Microsoft
Mejor autocompletado y diagnósticos
Makefile Tools -
ms-vscode.makefile-toolsSoporte para proyectos con Makefiles
Compilación integrada
CodeLLDB -
vadimcn.vscode-lldb(opcional, para debugging avanzado)Debugger alternativo con mejor visualización
# Instalar desde terminal
code --install-extension ms-vscode.cpptools
code --install-extension llvm-vs-code-extensions.vscode-clangd
code --install-extension ms-vscode.makefile-toolsConfiguración del Language Server: clangd¶
El Language Server Protocol (LSP) es un estándar que permite a los editores obtener información semántica del código: autocompletado, diagnósticos, navegación, refactoring, etc. Para C, clangd es la opción más robusta.
Instalación de clangd¶
# Ubuntu/Debian
sudo apt install clangd
# Fedora/RHEL
sudo dnf install clang-tools-extra
# macOS
brew install llvm
# Verificar instalación
clangd --versionConfiguración de clangd en VS Code¶
Creá o editá el archivo .vscode/settings.json en tu proyecto:
{
// Configuración de clangd
"clangd.path": "/usr/bin/clangd",
"clangd.arguments": [
"--background-index",
"--clang-tidy",
"--completion-style=detailed",
"--header-insertion=iwyu",
"--pch-storage=memory"
],
// Desactivar IntelliSense de C/C++ extension para evitar conflictos
"C_Cpp.intelliSenseEngine": "disabled",
// Configuración de formato (clang-format)
"editor.formatOnSave": true,
"C_Cpp.clang_format_style": "{ BasedOnStyle: LLVM, IndentWidth: 4, UseTab: Never }",
// Ayudas visuales
"editor.bracketPairColorization.enabled": true,
"editor.guides.bracketPairs": true
}Explicación de argumentos de clangd:
--background-index: Indexa el código en segundo plano para navegación rápida--clang-tidy: Activa análisis estático de código (detecta bugs comunes)--completion-style=detailed: Autocompletado detallado con documentación--header-insertion=iwyu: Incluye headers automáticamente (“Include What You Use”)--pch-storage=memory: Usa RAM para headers precompilados (más rápido)
Archivo compile_commands.json¶
Para que clangd entienda tu proyecto, necesita saber cómo compilarlo. Esto se especifica en compile_commands.json.
Método 1: Generar con Make + Bear
# Instalar bear (Build EAR - genera compile_commands.json)
sudo apt install bear # Ubuntu/Debian
sudo dnf install bear # Fedora
# Generar compile_commands.json
bear -- make
# Esto crea compile_commands.json en el directorio actualMétodo 2: Generar manualmente para proyecto simple
Si tenés un proyecto simple con pocos archivos, podés crear compile_commands.json manualmente:
[
{
"directory": "/home/usuario/mi-proyecto",
"command": "gcc -Wall -Wextra -std=c11 -g -o programa main.c lista.c utils.c",
"file": "main.c"
},
{
"directory": "/home/usuario/mi-proyecto",
"command": "gcc -Wall -Wextra -std=c11 -g -o programa main.c lista.c utils.c",
"file": "lista.c"
},
{
"directory": "/home/usuario/mi-proyecto",
"command": "gcc -Wall -Wextra -std=c11 -g -o programa main.c lista.c utils.c",
"file": "utils.c"
}
]Método 3: Con CMake
# CMake genera compile_commands.json automáticamente
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 .
# Crear symlink en la raíz del proyecto si CMake está en build/
ln -s build/compile_commands.json compile_commands.jsonConfiguración de compilación integrada¶
VS Code permite compilar tu proyecto sin salir del editor. Hay dos métodos principales:
Método 1: Tasks con tasks.json (proyecto simple)¶
Creá .vscode/tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"label": "Compilar programa",
"type": "shell",
"command": "gcc",
"args": [
"-Wall",
"-Wextra",
"-Wconversion",
"-std=c11",
"-g",
"-o",
"${workspaceFolder}/programa",
"${workspaceFolder}/main.c",
"${workspaceFolder}/lista.c",
"${workspaceFolder}/utils.c"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "always",
"panel": "shared"
},
"problemMatcher": "$gcc"
},
{
"label": "Compilar con sanitizers",
"type": "shell",
"command": "gcc",
"args": [
"-Wall",
"-Wextra",
"-Wconversion",
"-std=c11",
"-g",
"-fsanitize=address",
"-fsanitize=undefined",
"-o",
"${workspaceFolder}/programa-sanitized",
"${workspaceFolder}/main.c",
"${workspaceFolder}/lista.c",
"${workspaceFolder}/utils.c"
],
"group": "build",
"problemMatcher": "$gcc"
},
{
"label": "Ejecutar programa",
"type": "shell",
"command": "${workspaceFolder}/programa",
"dependsOn": ["Compilar programa"],
"group": {
"kind": "test",
"isDefault": true
}
},
{
"label": "Limpiar",
"type": "shell",
"command": "rm",
"args": [
"-f",
"${workspaceFolder}/programa",
"${workspaceFolder}/programa-sanitized"
],
"group": "build"
}
]
}Uso de tasks:
# Compilar (task por defecto)
Ctrl+Shift+B
# Ejecutar task específica
Ctrl+Shift+P → "Tasks: Run Task" → elegir task
# Atajo: configurar keybinding personalizado
# File → Preferences → Keyboard Shortcuts → buscar "workbench.action.tasks.runTask"Explicación de opciones importantes:
"isDefault": true: Marca la task como predeterminada paraCtrl+Shift+B"problemMatcher": "$gcc": Parsea la salida de GCC para mostrar errores en el panel “Problems”"dependsOn": Ejecuta otra task antes de esta (útil para “compilar y ejecutar”)"presentation": Controla cómo se muestra la terminal de la task
Método 2: Makefile Tools (proyecto con Makefile)¶
Si tu proyecto usa Makefile, la extensión Makefile Tools provee integración visual.
Configuración en .vscode/settings.json:
{
"makefile.extensionOutputFolder": ".vscode",
"makefile.launchConfigurations": [
{
"cwd": "${workspaceFolder}",
"binaryPath": "${workspaceFolder}/programa",
"binaryArgs": []
}
],
"makefile.configurations": [
{
"name": "Debug",
"makeArgs": ["DEBUG=1"]
},
{
"name": "Release",
"makeArgs": []
}
]
}Uso:
La extensión agrega una barra lateral con targets de Make
Botón “Build” en la barra de estado para compilar
Selección de configuración (Debug/Release)
Navegación visual de targets
Configuración de debugging integrado¶
El debugging visual es una de las características más poderosas de VS Code. Permite ejecutar código paso a paso, inspeccionar variables, establecer breakpoints condicionales, y más.
Configuración básica de launch.json¶
Creá .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug programa",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/programa",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Habilitar pretty-printing para gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Establecer flavor de desensamblado a Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "Compilar programa",
"miDebuggerPath": "/usr/bin/gdb",
"logging": {
"engineLogging": false
}
},
{
"name": "Debug con argumentos",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/programa",
"args": ["archivo.txt", "--verbose"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"preLaunchTask": "Compilar programa"
},
{
"name": "Debug test específico",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/tests/test_lista",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"preLaunchTask": "Compilar tests"
},
{
"name": "Attach a proceso corriendo",
"type": "cppdbg",
"request": "attach",
"program": "${workspaceFolder}/programa",
"processId": "${command:pickProcess}",
"MIMode": "gdb"
}
]
}Explicación de campos importantes:
"type": "cppdbg": Usa el debugger de C/C++ de Microsoft (basado en GDB/LLDB)"request": "launch": Inicia el programa (vs. “attach” a proceso existente)"program": Ruta al ejecutable a debuggear"args": Argumentos de línea de comandos"stopAtEntry": true: Para en la primera línea demain()"preLaunchTask": Task a ejecutar antes de debuggear (típicamente, compilar)"MIMode": Debugger backend (“gdb” en Linux, “lldb” en macOS)"externalConsole": false: Usa terminal integrada de VS Code
Uso del debugger¶
Iniciar debugging:
# Iniciar debug de la configuración por defecto
F5
# Seleccionar configuración y debuggear
Ctrl+Shift+D → seleccionar config → F5
# Ejecutar sin debuggear
Ctrl+F5Controles de debugging:
F5 # Continuar ejecución
F10 # Step Over (ejecutar línea, no entrar en funciones)
F11 # Step Into (entrar en función)
Shift+F11 # Step Out (salir de función actual)
Shift+F5 # Detener debugging
Ctrl+Shift+F5 # Reiniciar debuggingBreakpoints:
Click izquierdo en el margen izquierdo del editor (aparece punto rojo)
Breakpoint condicional: Click derecho → “Add Conditional Breakpoint”
Ejemplo:
i == 50(para solo cuandoies 50)Ejemplo:
strcmp(nombre, "test") == 0
Logpoint: Imprime mensaje sin detener ejecución
Click derecho → “Add Logpoint”
Ejemplo:
"Valor de i: {i}, ptr: {ptr}"
Paneles de debugging:
Variables: Inspección de variables locales y globales
Expandir estructuras y punteros
Click derecho → “Add to Watch” para monitorear
Watch: Expresiones personalizadas a monitorear
Agregar expresiones como
lista->tamanio,*ptr, etc.Se evalúan en cada paso
Call Stack: Pila de llamadas actual
Click en frame para ver variables en ese contexto
Útil para entender cómo llegaste a un punto
Breakpoints: Lista de todos los breakpoints
Habilitar/deshabilitar sin eliminar
Ver condiciones
Debug Console: Ejecutar expresiones arbitrarias
Evaluar variables:
p variableLlamar funciones:
call mi_funcion(42)Usar comandos GDB directamente:
-exec info registers
Debugging avanzado: Pretty Printers¶
GDB puede ser configurado para mostrar estructuras complejas de forma legible mediante pretty printers.
Ejemplo: Pretty printer para lista enlazada
Creá .gdbinit en el directorio de tu proyecto:
# .gdbinit - Pretty printers personalizados
python
import gdb
class ListaPrinter:
"""Pretty printer para lista_t"""
def __init__(self, val):
self.val = val
def to_string(self):
largo = self.val['largo']
return f"lista_t con {largo} elementos"
def children(self):
"""Itera sobre los nodos de la lista"""
nodo = self.val['primero']
count = 0
while nodo != 0:
yield (f'[{count}]', nodo['dato'])
nodo = nodo['siguiente']
count += 1
def lookup_type(val):
"""Registra pretty printers"""
if str(val.type) == 'lista_t *':
return ListaPrinter(val.dereference())
return None
gdb.pretty_printers.append(lookup_type)
endAhora al inspeccionar una lista_t en el debugger, verás los elementos expandidos automáticamente.
Debugging con Valgrind integrado¶
Podés ejecutar Valgrind desde VS Code y parsear su salida:
Task en tasks.json:
{
"label": "Valgrind memcheck",
"type": "shell",
"command": "valgrind",
"args": [
"--leak-check=full",
"--show-leak-kinds=all",
"--track-origins=yes",
"--verbose",
"--log-file=valgrind-out.txt",
"${workspaceFolder}/programa"
],
"dependsOn": ["Compilar programa"],
"group": "test",
"presentation": {
"reveal": "always"
}
}Launch config para debugging con Valgrind:
{
"name": "Debug con Valgrind",
"type": "cppdbg",
"request": "launch",
"program": "/usr/bin/valgrind",
"args": [
"--leak-check=full",
"--track-origins=yes",
"${workspaceFolder}/programa"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb"
}Configuración completa de ejemplo¶
Aquí hay una estructura completa de .vscode/ para un proyecto típico en C:
mi-proyecto/
+-- .vscode/
| +-- c_cpp_properties.json # Configuración de IntelliSense
| +-- launch.json # Configuraciones de debugging
| +-- settings.json # Settings específicos del proyecto
| +-- tasks.json # Tasks de compilación
+-- src/
| +-- main.c
| +-- lista.c
| +-- lista.h
+-- tests/
| +-- test_lista.c
+-- Makefile
+-- compile_commands.json
+-- .gdbinit.vscode/c_cpp_properties.json (solo si no usás clangd):
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}Atajos de teclado útiles para C¶
Agregá estos keybindings personalizados en File → Preferences → Keyboard Shortcuts (JSON):
[
{
"key": "ctrl+shift+b",
"command": "workbench.action.tasks.build"
},
{
"key": "ctrl+shift+t",
"command": "workbench.action.tasks.test"
},
{
"key": "f5",
"command": "workbench.action.debug.start",
"when": "debuggersAvailable && debugState == 'inactive'"
},
{
"key": "ctrl+k ctrl+i",
"command": "editor.action.showHover",
"when": "editorTextFocus"
}
]Problemas específicos de C/C++¶
clangd no funciona o da errores¶
# Verificar que clangd está instalado
which clangd
clangd --version
# Ver output de clangd en VS Code
# View → Output → seleccionar "clangd" en dropdown
# Verificar que compile_commands.json existe
ls -la compile_commands.json
# Regenerar compile_commands.json
bear -- make clean && bear -- makeError común: “clangd: compile commands not found”
Solución: Asegurate de que compile_commands.json esté en la raíz del workspace.
GDB no inicia o crashea¶
# Verificar instalación de GDB
gdb --version
# Probar debuggear manualmente
gdb ./programa
(gdb) run
(gdb) quit
# Si falla, puede ser problema de permisos ptrace
# En Linux, permitir ptrace para debugging
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scopeBreakpoints no funcionan o se “saltan”¶
Causas comunes:
Compilado sin
-g: Asegurate de que tu task/Makefile incluye-ggcc -g -Wall -Wextra -o programa main.cOptimización activada:
-O2o-O3pueden eliminar código# Para debug, usar -O0 (sin optimización) gcc -g -O0 -o programa main.cCódigo inline: Funciones muy pequeñas pueden ser inlined
Solución: Usar
-fno-inlinedurante debug
IntelliSense no muestra sugerencias¶
# Si usas clangd y C/C++ extension simultáneamente:
# Desactivar IntelliSense de C/C++ extension
# En settings.json:
{
"C_Cpp.intelliSenseEngine": "disabled"
}
# Recargar window
Ctrl+Shift+P → "Developer: Reload Window"Errores de “undefined reference” al compilar¶
Esto indica problema de linkeo, no del editor. Verificá:
# Asegurate de linkear todas las bibliotecas necesarias
# En tasks.json, args debe incluir todos los .c
"args": [
"-o", "programa",
"main.c",
"lista.c", // ← No olvidar implementaciones
"utils.c",
"-lm" // ← Bibliotecas del sistema si son necesarias
]Variables no se muestran en debugger¶
# Compilar sin optimizaciones
gcc -g -O0 -o programa main.c
# Algunas variables pueden ser optimizadas incluso con -O0
# Usar 'volatile' para forzar que se mantengan:
volatile int debug_var = 42;Resolución de problemas comunes¶
VS Code no abre desde terminal¶
# En Linux, agregar al PATH si es necesario
echo 'export PATH="$PATH:/usr/share/code/bin"' >> ~/.bashrc
source ~/.bashrc
# Verificar instalación
which code
code --versionExtensiones no cargan¶
# Reiniciar con extensiones deshabilitadas
code --disable-extensions
# Ver logs de extensiones
# Help → Toggle Developer Tools → ConsolePerformance lenta¶
# Excluir archivos/carpetas grandes de búsqueda
# Configuración → Files: Exclude
# Agregar: **/node_modules, **/.git
# Desactivar extensiones innecesarias
# Extensions → Gear icon → DisableProblemas de formateo¶
# Verificar formateador por defecto
# Ctrl+Shift+P → "Format Document With..."
# Elegir Prettier o el apropiado
# Configurar formateador en settings.json
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter"
}
}Recursos para seguir aprendiendo¶
Documentación oficial¶
VS Code Documentation - documentación completa oficial
VS Code Tips and Tricks - consejos oficiales
Keyboard Shortcuts Reference - PDF con todos los atajos
Extensiones recomendadas por área¶
Desarrollo web¶
Live Server: Servidor local con hot reload
Auto Rename Tag: Renombrado automático de tags HTML
CSS Peek: Ver definiciones CSS desde HTML
Emmet: Expansión rápida de HTML/CSS (viene integrado)
Python¶
Python: Soporte oficial de Microsoft
Pylance: Language server avanzado
Python Docstring Generator: Generador automático de docstrings
Git y colaboración¶
GitLens: Superpoderes para Git
Live Share: Colaboración en tiempo real
Git Graph: Visualización gráfica del historial
Productividad¶
TODO Highlight: Resaltar comentarios TODO/FIXME
Bookmarks: Marcadores en código
Path Intellisense: Autocompletado de rutas de archivos
Cursos y tutoriales¶
VS Code Can Do That?: Serie de videos oficiales de Microsoft
Traversy Media: Tutoriales de VS Code en YouTube
FreeCodeCamp: Curso gratuito de VS Code
Comunidad¶
GitHub Issues - reportar bugs o solicitar features
VS Code Blog - novedades y updates
Epílogo¶
VS Code es más que un editor: es una plataforma de desarrollo completa que crece con vos. Empezás con funcionalidades básicas y gradualmente incorporás extensiones y configuraciones que se adaptan a tu estilo de trabajo y necesidades específicas.
La belleza de VS Code está en su balance perfecto entre simplicidad para principiantes y potencia para expertos. Con la configuración básica que viste en esta guía, ya tenés todo lo necesario para ser productivo. A medida que desarrolles más proyectos, vas a descubrir nuevas extensiones y trucos que van a hacer tu workflow aún más eficiente.
¡Felicitaciones! Ya tenés las herramientas para convertir VS Code en tu ambiente de desarrollo ideal.
$ code --version
1.84.2
f1b07bd25dfad64b0167beb15359ae573aecd2cc
x64
$ echo "¡Listo para programar!"
¡Listo para programar!