Sunday, April 13 2025

C/C++ threads, forks desde windows? Ya no hay problema...

Hola, hace unas semanas publiqué acerca de instalar el subsistema Ubuntu en Windows 10, ahora platicaremos de algo que le interesa a todo desarrollador: ¿qué ventajas le puedo sacar a esto con C/C++? Si estudias una carrera relacionada a la computación, durante la universidad (o mas adelante en el trabajo) te surgirá la necesidad de debugear archivos de C/C++, y si estas trabajando con hilos, el asunto puede ponerse un poco más complicado aún. Una solucion es usar tu Raspberry, pero aquí te tengo una alternativa.

Si te gusta Visual Studio Code y necesitas usar los threads, esto te interesa. Como prerequisito solo necesitas tener tu ambiente de Ubuntu (puedes ver como hacerlo en el blog anterior) y tener instalado VS Code en tu Windows.

Lo que seguramente ya debes saber si estás buscando debugear C++ en Linux es que Windows tiene cierto problema con los forks, threads, etc., por lo que necesitamos usar el subsistema de Linux, esto es más fácil de lo que parece. Aquí estan resumidos los pasos:

- Abre tu Ubuntu:
- Ingresa el siguiente comando: 
sudo apt-get install build-essential gdb

- IMPORTANTE: debes tener instalado el compilador g++ en tu Ubuntu, puedes verificarlo con:
whereis g++
si no lo tienes, instálalo con:
sudo apt install build-essential
- Luego, crea o abre un directorio y ábrelo con VS Code:
para este punto se debió abrir tu VS Code, pero nota en la esquina inferior izquierda que esta abierto desde Linux:
(debe decir WSL Ubuntu)👉

- Ahora, crea un archivo de C++ e ingresa tu código, yo ingresare uno con pthreads dado que eso es lo que quiero debuggear:
Aquí hay un código de ejemplo:

#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <cmath>

using namespace std;

int n;
double *total_por_thr;
double total = 0;

static void * serie(void * args){
    int lim = * (int *) args;
    *(double *) args = ((double) 1) / ((double) lim * ((double ) lim + 1));
    return args;
}

int main() {
   
    cout << "ingrese el valor de n: ";
    cin >> n;
    pthread_t thrs[n];

    for (int i = 1; i <= n; i++) {
        int *id = (int *) malloc(sizeof(int));
        *id = i;
        pthread_create(&thrs[i], nullptr, &serie, id);
    }

    for (int i = 1; i <= n; i++) {
        pthread_join(thrs[i], (void **) &total_por_thr);
       
        cout << "\nresultado pthread " << i << " = " << *total_por_thr;
       
        total += *total_por_thr;
       
    }

    free(total_por_thr);

    isinf(total) ? cout << "\nLa serie diverge "<< endl : cout << "\nLa serie converge, total = " << total << endl;

    return 0;
}

Lo siguiente que debes hacer es descargarte las extensiones de C/C++ de VS Code desde Ubuntu, ya que, si las tienes instaladas en Windows, no podrás usarlas remotamente en Ubuntu. Yo ya las tengo así que solo debo decir que tuve que presionar varias veces el botón para que funcionara... Luego de eso debes cerrar y volver a abrir VS Code para que se habiliten correctamente las extensiones:

- Hecho lo anterior, debería aparecer el ícono de play en la esquina superior derecha:

- Aparece la configuración de compilador, en la que seleccionarás la siguiente opción:

- Lo más probable es que aparezca el siguiente dialogo:

puedes seleccionar "depurar de todos modos" o "mostrar el error", que, sí o sí, aparecerá, pero es fácil arreglarlo:

- Luego de depurar por primera vez, aparecera el folder .vscode y adentro tiene tasks.json, este json contiene las configuraciones de cómo depurar los archivos en ese directorio, ahí agrega la siguiente linea de codigo en "args"; si sabes un poco de node, te podras hacer la idea de que es similar a configurar los comandos en tu package.json:

- Vuelve a depurar y revisa la consola de depuracion, el error debio haberse ido:



¡¡Y listo!! con esto ya tienes un debugger de C++ con toda la configuracion de hilos y forks desde tu Windows. La verdad me hubiera gustado saber esto el semestre pasado, pero, lo importante es que ¡¡tienes esta herramienta a tu dispocision!! Espero te haya servido, abajo te dejo los documentos oficiales de VS Code por si deseas profundizar en el tema.

Referencias
Visual Studio Code. (2022, 13 de mayo). Using C++ and WSL in VS Code. https://code.visualstudio.com/docs/cpp/config-wsl




Leave a Comment

No hay comentarios:

Con la tecnología de Blogger.