2011-01-06 14 views
10

Actualmente estoy viendo una rareza en las funciones de uno de mis programas en Visual Studio está actuando. VS me permite poner puntos de corte en ciertos puntos del archivo, pero luego en el modo de depuración mueve estos puntos de corte a espacios y comentarios.Visual Studio - Puntos de interrupción del depurador Se mueven y ya no tocan las líneas que se supone que

cosas que ya he probado:

  1. suprimido el archivo PDB y reconstruido.
  2. Eliminado el archivo EXE y reconstruido.
  3. Reconstruyó todo el proyecto. (Limpiar, reconstruir)
  4. Comprobó que la optimización está desactivada.
  5. Comprobó que la ruta de depuración es la misma que la ruta de salida de compilación.
  6. Se marca la casilla "Requerir que los archivos fuente coincidan exactamente con la versión original".

En caso de que no es más que algo raro con mi código que está causando esto aquí es la función que ocurre en:

bool BManager::Record(string _strFile) 
{ 
    bool bSuccess = false; 
    CBitmap * bitmap = new CBitmap(); 
    HBITMAP handle = NULL; 
    HPALETTE hPalette = NULL; 
    //LoadBitmapFromBMPFile((LPTSTR)_strFile.c_str(), &handle, &hPalette); 
    ofstream out; 
    out.open(_strFile.c_str()); 

    handle = (HBITMAP)LoadImage(NULL, (LPTSTR)_strFile.c_str(), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE); 

    bitmap->FromHandle(handle); 
    bSuccess = ImageBitmap_Record(bitmap); 
    delete bitmap; 
    bitmap = NULL; 
    CloseHandle(handle); 
    return bSuccess; 
} 

¿Alguna idea?

+1

+1 esto me pasó a mí también, y aún no lo he descubierto –

+3

Lo veo pero solo cuando es causado por una de las cosas en su lista . ¿Tal vez sucede algo extraño con el fin de las líneas o con algo más que pueda confundir el recuento de líneas del editor de texto con el del depurador? O tal vez los símbolos de depuración incorrectos se están cargando (a veces VS carga otras versiones de PDB de un lugar estúpido sin importar cuánto lo diga, consulte con Process Explorer qué archivo .PDB realmente está cargando, tal vez). –

+0

Herramientas + Opciones, Depuración, General, "Requerir que los archivos fuente coincidan exactamente con la versión original". Asegúrate de que esté marcado. –

Respuesta

3

Cuando veo cosas como esta, lo primero que siempre hago es abrir la ventana Depurar-> Módulos y asegurarme de que el binario que estoy depurando se cargó desde el lugar que creo que debería ser.

+0

primera reacción también, pero él dice "Comprobó que la ruta de depuración es la misma que la ruta de salida de compilación". entonces creo que no es el caso. –

+0

Sí. Ya estoy seguro de eso. – Alikar

4

Asegúrese de que el archivo que contiene ese código no tiene ningún indicador de optimización que anule la configuración global.

+0

Esto es lo más probable que esté sucediendo. Las optimizaciones pueden reordenar la ejecución de su código, lo que puede dificultar el establecimiento de puntos de interrupción útiles. Cuando eso me sucede, generalmente recompilo sin optimizaciones o no incluyo el código de ensamblado para ver qué está sucediendo realmente (no es tan malo como se podría pensar :)) – Alex

+0

Esto no estaba sucediendo. – Alikar

0

Aquí están algunas ideas:

  1. el archivo de origen se ha cambiado desde la última vez ejecutó el depurador.
  2. Tu código ha sido optimizado y quizás algunas líneas eliminadas por el compilador a través de la optimización.
  3. VS no le gusta la línea a la que está asignado el punto de interrupción. Es siempre le gusta la última línea de una declaración repartida en varias líneas .
  4. El archivo de origen que muestra es diferente del archivo de origen que se compiló (pueden ser de dos carpetas diferentes ).
0

Tuve el mismo problema y solucioné creando una nueva "solución" en VS e importando los archivos .h y .cpp existentes en ella.

Se han borrado los problemas de depuración.

Estoy seguro de que el problema estaba en algún lugar de la configuración.

4

Encontré fin de línea podría causar un problema como este. Una vez que cambié algunas líneas del carro de estilo de Windows al transporte de estilo de Linux por accidente, el punto de depuración ya no toca la línea.Lo que hice para resolver el problema fue usar notepad ++ para arreglar EOL

+0

Supongo que querías decir "fin de línea". Acabo de enfrentar este problema y lo solucioné como lo describió. –

+0

Me acabo de encontrar con el mismo problema, la codificación no era ANSI y eso aparentemente arruinó los puntos de interrupción. –

Cuestiones relacionadas