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:
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:
- Ahora, crea un archivo de C++ e ingresa tu código, yo ingresare uno con pthreads dado que eso es lo que quiero debuggear:
#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:
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:
Referencias
Visual Studio Code. (2022, 13 de mayo). Using C++ and WSL in VS Code. https://code.visualstudio.com/docs/cpp/config-wsl
No hay comentarios: