sisoputnfrba / foro

Foro de consultas para el trabajo práctico
146 stars 5 forks source link

Problema de referencias con visual #4066

Closed matuaponte closed 1 week ago

matuaponte commented 2 weeks ago

Hola buenas noches, no encontré nada que hablara de esto que me esta pasando. De un dia para el otro el visual me dejo de funcionar las referencias, los include, las definiciones implícitas y no se cual es el error. Ya probé volviendo a instalar el repo y cambiar el workspace, y la verdad que no se me ocurre que mas puede ser. Desde ya, gracias!

RaniAgus commented 2 weeks ago

Los ayudantes adivinos no somos y, sin ningún contexto, va a ser muy complicado que te podamos dar una respuesta.

Pasanos una captura de pantalla de cómo se ve el explorador de archivos de VSCode, y el contenido en texto del archivo tp.code-workspace que, asumo, habrás usado para abrir el repo

matuaponte commented 2 weeks ago

Si, entiendo, el tema es que no sabia como darles un contexto para que me ayuden. Este es el archivo: imagen_2024-07-02_145911541

RaniAgus commented 2 weeks ago

Nono, o sea, la captura de pantalla sería del explorador de archivos, donde se ven las carpetas con los archivos del repo.

Siguiendo con lo que dije antes, en general todo lo que nos puedan pasar en texto, pásenlo en texto así lo podemos copiar, probar, etc. Igual no veo nada raro en el archivo así que no hace falta que nos lo pases.

matuaponte commented 2 weeks ago

perdón, leí mal. Ahí esta. image

RaniAgus commented 2 weeks ago

Mmm... Nada raro por ahora :thinking:

¿El problema es de compilación o solo el autocompletado de VSCode? Si es el primero, ¿nos podrías copiar y pegar el output del compilador en la pestaña "Terminal"?

image

matuaponte commented 2 weeks ago

Ahora parece que soluciono el problema de las referencias entre archivos, lo que hice fue ejecutar cpu solo una vez y había warnigs por todos lados pero se levantaba igual, entonces levante todos los módulos en orden y me dejaron de aparecer todos esos warnigs en cpu. Levante solo cpu despues de eso y me dejo de dar warnings como los que vos pasaste, entonces ahora de compilación no es. El problema que sigo teniendo creo que es el autocompletado, por ej: quiero ir a un archivo desde un include (apretando crtl + click) y no me deja.

RaniAgus commented 2 weeks ago

¿Cuáles son los warnings que aparecen al compilar por primera vez? Antes de volver a compilar entrá a la carpeta de cada módulo y ejecutá make clean para borrar todos los compilados que ya existen (vas a ver que se van a borrar las carpetas bin y obj de cada módulo).

La razón por la que estos warnings desaparecen es que el makefile no recompila si no hubo cambios en el código, entonces al VSCode no le aparecen los warnings y se van, pero éstos son muy importantes ya que nos suelen indicar que en algún lugar podemos estar metiendo la pata.

Dicho esto, creo que la única forma de que no funcione el autocompletado es que falte incluir algún header en donde esté declarada la función.

matuaponte commented 2 weeks ago

Ahi lo hice, estos son. image

En el caso de ciclo de instrucciones, tengo un .h definido así:

#ifndef CICLO_DE_INSTRUCCION_H_
#define CICLO_DE_INSTRUCCION_H_

#include "main.h"
#include "interrupciones.h"

PCB* recibir_pcb();
void enviar_pcb(op_code motivo);
char* fetch();
void enviar_PC_a_memoria(uint32_t pc);
char* obtener_instruccion_de_memoria();
t_instruccion* decode(char* instruccion);
void execute(t_instruccion* instruccion);
int check_interrupt();
void realizar_ciclo_de_instruccion();

#endif /* CICLO_DE_INSTRUCCION_H_ */
RaniAgus commented 1 week ago

¡Ahí está!

Debe faltar el #include con el header en donde está definida la función que estás intentando acceder con Ctrl + Click, fijate que en algunos lugares no está encontrando el enum que contiene los nombres de las instrucciones, o funciones como obtener_numero_pagina, traducir_direccion_logica_a_fisica, etc. Sin esto, VSCode no sabe dónde ir a buscar dicha función, por más que eventualmente se termine incluyendo al compilar.

Revisen si pueden incluir estas definiciones de funciones, teniendo cuidado con las dependencias circulares (A -> B y B -> A). De ser así, la forma de "romper" con el ciclo es crear otro archivo C que contenga las definiciones que necesitan A y B.

Saludos

PD: Para que otros alumnos puedan encontrar este issue, la captura de pantalla dice: implicit declaration of function '' [-Wimplicit-function-declaration] (es por esto que en el readme les sugerimos no subir capturas de pantalla y en el gif que subí antes se muestra cómo copiar el output del compilador desde la pestaña "Terminal").

matuaponte commented 1 week ago

Buenas, me fije los #include y están correctos, ni se generan casos cíclicos. El problema que no entiendo es porque cuando apreto sobre el warning me dice que no existe el archivo. image Ademas sigo sin entender porque no podrian funcionar las referencias con ctrl +click izq en cualquier parte del codigo. Por ahi tenga que reinstalar todo, a otros compañeros no les pasa lo mismo.

RaniAgus commented 1 week ago

El problema que no entiendo es porque cuando apreto sobre el warning me dice que no existe el archivo.

Eso no debería ocurrir, ¿podrías pasarnos el output de la terminal al compilar en formato texto, porfa?

matuaponte commented 1 week ago

Supongo que a formato texto te referis a esto no?

Executing task in folder cpu: make all 

mkdir -pv obj/
mkdir: created directory 'obj/'
gcc -g -Wall -DDEBUG -fdiagnostics-color=always -c -o "obj/cicloDeInstrucciones.o" src/cicloDeInstrucciones.c -I../utils/src -I./src
src/cicloDeInstrucciones.c: In function ‘decode’:
src/cicloDeInstrucciones.c:72:19: warning: unused variable ‘argumento3’ [-Wunused-variable]
   72 |     registrosCPU* argumento3 = malloc(sizeof(registrosCPU));
      |                   ^~~~~~~~~~
src/cicloDeInstrucciones.c: In function ‘execute’:
src/cicloDeInstrucciones.c:213:9: warning: implicit declaration of function ‘SET’; did you mean ‘L_SET’? [-Wimplicit-function-declaration]
  213 |         SET(*(registrosCPU *)instruccion->arg1, *(int *)instruccion->arg2);
      |         ^~~
      |         L_SET
src/cicloDeInstrucciones.c:217:9: warning: implicit declaration of function ‘MOV_IN’ [-Wimplicit-function-declaration]
  217 |         MOV_IN(*(registrosCPU *)instruccion->arg1, *(registrosCPU *)instruccion->arg2);
      |         ^~~~~~
src/cicloDeInstrucciones.c:220:9: warning: implicit declaration of function ‘MOV_OUT’ [-Wimplicit-function-declaration]
  220 |         MOV_OUT(*(registrosCPU *)instruccion->arg1, *(registrosCPU *)instruccion->arg2);
      |         ^~~~~~~
src/cicloDeInstrucciones.c:223:9: warning: implicit declaration of function ‘SUM’ [-Wimplicit-function-declaration]
  223 |         SUM(*(registrosCPU *)instruccion->arg1, *(registrosCPU *)instruccion->arg2);
      |         ^~~
src/cicloDeInstrucciones.c:227:9: warning: implicit declaration of function ‘SUB’ [-Wimplicit-function-declaration]
  227 |         SUB(*(registrosCPU *)instruccion->arg1, *(registrosCPU *)instruccion->arg2);
      |         ^~~
src/cicloDeInstrucciones.c:231:9: warning: implicit declaration of function ‘JNZ’ [-Wimplicit-function-declaration]
  231 |         JNZ(*(registrosCPU *)instruccion->arg1, *(int *)instruccion->arg2);
      |         ^~~
src/cicloDeInstrucciones.c:235:9: warning: implicit declaration of function ‘RESIZE’ [-Wimplicit-function-declaration]
  235 |         RESIZE(*(int *)instruccion->arg1);
      |         ^~~~~~
src/cicloDeInstrucciones.c:239:9: warning: implicit declaration of function ‘COPY_STRING’ [-Wimplicit-function-declaration]
  239 |         COPY_STRING(*(int *)instruccion->arg1);
      |         ^~~~~~~~~~~
src/cicloDeInstrucciones.c:251:9: warning: implicit declaration of function ‘IO_GEN_SLEEP’ [-Wimplicit-function-declaration]
  251 |         IO_GEN_SLEEP((char*)instruccion->interfaz, *(int *)instruccion->arg1);
      |         ^~~~~~~~~~~~
src/cicloDeInstrucciones.c:255:9: warning: implicit declaration of function ‘IO_STDIN_READ’ [-Wimplicit-function-declaration]
  255 |         IO_STDIN_READ(instruccion->interfaz, *(registrosCPU *)instruccion->arg1, *(registrosCPU *)instruccion->arg2);
      |         ^~~~~~~~~~~~~
src/cicloDeInstrucciones.c:258:9: warning: implicit declaration of function ‘IO_STDOUT_WRITE’ [-Wimplicit-function-declaration]
  258 |         IO_STDOUT_WRITE(instruccion->interfaz, *(registrosCPU *)instruccion->arg1, *(registrosCPU *)instruccion->arg2);
      |         ^~~~~~~~~~~~~~~
src/cicloDeInstrucciones.c:279:9: warning: implicit declaration of function ‘EXIT’ [-Wimplicit-function-declaration]
  279 |         EXIT();
      |         ^~~~
gcc -g -Wall -DDEBUG -fdiagnostics-color=always -c -o "obj/main.o" src/main.c -I../utils/src -I./src
src/main.c: In function ‘recibir_tamanio_pagina’:
src/main.c:63:12: warning: returning ‘void *’ from a function with return type ‘int’ makes integer from pointer without a cast [-Wint-conversion]
   63 |     return NULL;
      |            ^~~~
gcc -g -Wall -DDEBUG -fdiagnostics-color=always -c -o "obj/interrupciones.o" src/interrupciones.c -I../utils/src -I./src
gcc -g -Wall -DDEBUG -fdiagnostics-color=always -c -o "obj/instrucciones.o" src/instrucciones.c -I../utils/src -I./src
src/instrucciones.c: In function ‘MOV_IN’:
src/instrucciones.c:207:31: warning: implicit declaration of function ‘obtener_numero_pagina’ [-Wimplicit-function-declaration]
  207 |     uint32_t pagina_inicial = obtener_numero_pagina(direccionLogicaInicial);
      |                               ^~~~~~~~~~~~~~~~~~~~~
src/instrucciones.c:211:40: warning: implicit declaration of function ‘traducir_direccion_logica_a_fisica’ [-Wimplicit-function-declaration]
  211 |             uint32_t direccionFisica = traducir_direccion_logica_a_fisica(direccionLogicaInicial);
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/instrucciones.c: In function ‘COPY_STRING’:
src/instrucciones.c:292:79: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘void *’ [-Wformat=]
  292 |             log_info(log_cpu, "Acción: LEER - Dirección física = %d - Valor: %s", direccion_fisica_si, datos_de_si);
      |                                                                              ~^                        ~~~~~~~~~~~
      |                                                                               |                        |
      |                                                                               char *                   void *
      |                                                                              %p
src/instrucciones.c:296:83: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘void *’ [-Wformat=]
  296 |             log_info(log_cpu, "Acción: ESCRIBIR - Dirección física = %d - Valor: %s", direccion_fisica_di, datos_de_si);
      |                                                                                  ~^                        ~~~~~~~~~~~
      |                                                                                   |                        |
      |                                                                                   char *                   void *
      |                                                                                  %p
src/instrucciones.c:306:75: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘void *’ [-Wformat=]
  306 |         log_info(log_cpu, "Acción: LEER - Dirección física = %d - Valor: %s", direccion_fisica_si, datos_de_si);
      |                                                                          ~^                        ~~~~~~~~~~~
      |                                                                           |                        |
      |                                                                           char *                   void *
      |                                                                          %p
src/instrucciones.c:310:79: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘void *’ [-Wformat=]
  310 |         log_info(log_cpu, "Acción: ESCRIBIR - Dirección física = %d - Valor: %s", direccion_fisica_di, datos_de_si);
      |                                                                              ~^                        ~~~~~~~~~~~
      |                                                                               |                        |
      |                                                                               char *                   void *
      |                                                                              %p
src/instrucciones.c: In function ‘EXIT’:
src/instrucciones.c:366:5: warning: implicit declaration of function ‘enviar_pcb’ [-Wimplicit-function-declaration]
  366 |     enviar_pcb(INSTRUCCION_EXIT);
      |     ^~~~~~~~~~
gcc -g -Wall -DDEBUG -fdiagnostics-color=always -c -o "obj/algoritmosSustitucion.o" src/algoritmosSustitucion.c -I../utils/src -I./src
gcc -g -Wall -DDEBUG -fdiagnostics-color=always -c -o "obj/mmu.o" src/mmu.c -I../utils/src -I./src
src/mmu.c: In function ‘recibir_marco’:
src/mmu.c:24:12: warning: returning ‘void *’ from a function with return type ‘uint32_t’ {aka ‘unsigned int’} makes integer from pointer without a cast [-Wint-conversion]
   24 |     return NULL;
      |            ^~~~
src/mmu.c: In function ‘traducir_direccion_logica_a_fisica’:
src/mmu.c:55:12: warning: implicit declaration of function ‘mover_al_frente_de_la_estructura_LRU’ [-Wimplicit-function-declaration]
   55 |            mover_al_frente_de_la_estructura_LRU(entradaExistenteEnTLB);
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/mmu.c:83:21: warning: implicit declaration of function ‘FIFO’ [-Wimplicit-function-declaration]
   83 |                     FIFO(entradaTLB);
      |                     ^~~~
src/mmu.c:86:21: warning: implicit declaration of function ‘LRU’ [-Wimplicit-function-declaration]
   86 |                     LRU(entradaTLB);
      |                     ^~~
mkdir -pv bin/
mkdir: created directory 'bin/'
gcc -g -Wall -DDEBUG -fdiagnostics-color=always -o "bin/cpu" obj/cicloDeInstrucciones.o obj/main.o obj/interrupciones.o obj/instrucciones.o obj/algoritmosSustitucion.o obj/mmu.o -I../utils/src -I./src -L../utils/bin -lutils -lcommons -lpthread -lreadline -lm
 *  Terminal will be reused by tasks, press any key to close it. 
RaniAgus commented 1 week ago

Entiendo, al parecer se compila bien pero por algún motivo VSCode no estaría pudiendo parsear eso que imprime gcc y entender que pertenece a la carpeta cpu.

¿Hubo algún cambio en los archivos que están en la carpeta cpu/.vscode recientemente? Toda la configuración de VSCode está guardada en esos archivos y en el tp.code-workspace, por lo que se debería poder abrir el IDE de la misma forma que el resto (de hecho, reinstalar no debería cambiar nada).

Sino te recomendaría verlo en sábado de soporte, ya que tendríamos que entrar y chusmear cómo levantaron el workspace y la configuración. Al estar por un medio asincrónico quizás me esté perdiendo de algo :(

matuaponte commented 1 week ago

Por lo que vi en cpu esta igual de base, si cambio en kernel y en memoria, pero a la hora de correr cpu no deberia tener nada que ver.

Así esta en cpu:

{
  // See https://go.microsoft.com/fwlink/?LinkId=733558
  // for the documentation about the tasks.json format
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build",
      "command": "make all",
      "type": "shell",
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "problemMatcher": ["$gcc"]
    },
    {
      "label": "clean",
      "command": "make clean",
      "type": "shell",
      "group": {
        "kind": "none"
      },
      "problemMatcher": []
    }
  ]
}

Si, el sábado voy a intentar unirme al soporte, porque no puedo trabajar en el código.

RaniAgus commented 1 week ago

Oops, revisé el calendario y el sábado que viene no hay soporte por el parcial :(

¿Ocurre lo mismo al cerrar VSCode, abrir una terminal en la carpeta del repo y ejecutar code tp.code-workspace?

matuaponte commented 1 week ago

Si, o sea, abrirlo así me lleva la VSCode y al debuggear me tira los mismos warnings, si te referís a eso.

RaniAgus commented 1 week ago

Está bien que arroje warnings, es lo que imprime gcc al compilar. Lo que noto raro es que para kernel estos warnings se interpretan bien (verde) y en cpu no (rojo):

image

Entiendo que al clickear cualquier warning de Kernel te va a mandar al archivo correcto, pero por algún motivo en CPU no estaría pasando lo mismo a pesar de tener configuraciones iguales. ¿Sigue ocurriendo lo mismo luego de abrir el workspace con code tp.code-workspace?

matuaponte commented 1 week ago

Si, me sigue pasando lo mismo. image Totalmente de un día para el otro me paso, y creo no haber hecho nada raro mas que cambiar include para que no queden ciclos. Otra cosa que se me ocurre es restaurar algun commit anterior localmente, para ver si cambia algo pero no se.

RaniAgus commented 1 week ago

¿Es posible que tengas el repo clonado en una carpeta con espacios? Quizás eso afecte cómo el IDE parsea lo que imprime gcc de alguna forma

matuaponte commented 1 week ago

Lo tengo clonado en esta ruta /home/utnso/tp-2024-1c-Frituras/. No se si tenerlo ahí afectaría en algo.

iago64 commented 1 week ago

Buenas! Cómo va?

El path no tiene ningún espacio, con lo cual eso podríamos ir descartándolo, ahora una pregunta mas para entender el problema, hiciste algun cambio en el VSCode o en la VM? Porque acabo de clonarme el repo en el mismo path que indicas en una vm completamente limpia y levantó sin problemas y los warnings de CPU cuando les hago click me llevan al archivo y la linea correspondientes 😞

Saludos.-

matuaponte commented 1 week ago

Que yo recuerde no cambie nada en el visual, se puede volverlo a reconfigurar de fabrica o a instalar?

iago64 commented 1 week ago

Buenas! Cómo va?

Solo para descartar cosas, probaste de clonar el repo de nuevo y abrirlo desde el workspace?

Saludos.-

matuaponte commented 1 week ago

Si, ya probé con eso pero es lo mismo, lo único que se me ocurre es reinstalar la vm de nuevo, pero es lo que quiero evitar

iago64 commented 1 week ago

Buenas! Cómo va?

Una última cosa que se me ocurre para probar es el tema de las configs que tengas en VSCode, para eso, podes apretar Ctrl + , y eso te tiene que abrir una pestaña similar a la siguiente:

image

si haces click en el icono que esta arriba a la derecha:

image

Debería abrirte un JSON, podrías pasarnos el JSON a ver si tenes algo cambiado?

De todas formas si lo único que tenes cambiado de la VM es el repo con tu código, te diría que no sufras mas porque intente replicarlo con una VM recién descargada y el problema no lo logre replicar, por eso te preguntaba si habías cambiado algo.

Saludos.-

matuaponte commented 1 week ago

Esto es lo que me aparece en .json:

{
    "files.autoSave": "afterDelay",
    "editor.minimap.enabled": false,
    "debug.onTaskErrors": "debugAnyway",
    "explorer.confirmDelete": false,
    "window.zoomLevel": -1,
    "diffEditor.codeLens": true,
    "editor.language.brackets": [

    ]
}

Y así estaba hace 2 semanas:

{
    "files.autoSave": "afterDelay",
    "editor.minimap.enabled": false,
    "debug.onTaskErrors": "debugAnyway",
    "explorer.confirmDelete": false,
    "window.zoomLevel": -1
}
iago64 commented 1 week ago

Buenas!

Es raro, ninguna de las configs que veo me suena a que tenga algo que ver el editor, sinceramente viendo lo dificil que esta el tema la recomendación que te puedo dar es que subas todos los cambios locales y pruebes de arrancar en una VM limpia porque algo se cambió y no estamos dando en el clavo con que y falta mucho para el próximo soporte.

Saludos.-

matuaponte commented 1 week ago

sisi, muchas gracias igualmente.