2012-03-09 12 views

Respuesta

10

mono --debug no tiene nada que ver con el depurador, simplemente hace que Mono rastree la información de depuración para que pueda darle información de archivo/línea/columna en trazas inversas.

El comportamiento de System.Diagnostics.Debugger.Break() depende de su versión de Mono. AFAIK en su forma básica establece un punto de quiebre duro, por lo que si su aplicación no se ejecuta en un depurador duro nativo simplemente se bloqueará. Si su aplicación se ejecuta dentro de Mono Soft Debugger con Mono 2.11 o posterior (que aún no se ha lanzado), establecerá un punto de interrupción suave para el depurador de software y funcionará como se espera.

La forma básica de habilitar la depuración de complementos es establecer un comando de ejecución personalizado en su proyecto de complemento. Abra 'Opciones de proyecto', vaya a la sección 'Ejecutar> Comandos personalizados', agregue un comando personalizado para 'Ejecutar'. Establezca el ejecutable en MonoDevelop.exe y el directorio de trabajo para que sea su directorio contenedor. Esto significa que cuando ejecuta/depura su proyecto, MD realmente ejecutará ese ejecutable en lugar de ejecutar su proyecto directamente. Si MonoDevelop.exe carga su complemento, entonces podrá establecer puntos de interrupción, paso, etc.

La parte difícil aquí es hacer que MD cargue su complemento. Una forma de hacerlo sería hacer que su proyecto genere el addin dll en uno de los directorios en los que MD busca complementos, pero eso es algo muy raro de hacer en el momento del desarrollo. Una mejor solución es usar la variable de entorno no documentada MONODEVELOP_DEV_ADDINS para especificar un directorio adicional desde el cual MD cargue complementos. No hay una IU en MD para establecer los parámetros para los comandos personalizados, pero se admite internamente. Deberá editar manualmente el archivo csproj.

encontrar la parte que se parece a:

<CustomCommands> 
    <CustomCommands> 
    <Command type="Execute" 
     command="..\..\..\monodevelop\main\build\bin\MonoDevelop.exe" 
     workingdir="..\..\..\monodevelop\main\build\bin" /> 
    </CustomCommands> 
</CustomCommands> 

y el cambio a:

<CustomCommands> 
    <CustomCommands> 
    <Command type="Execute" 
     command="..\..\..\monodevelop\main\build\bin\MonoDevelop.exe" 
     workingdir="..\..\..\monodevelop\main\build\bin"> 
     <EnvironmentVariables> 
     <Variable name="MONODEVELOP_DEV_ADDINS" value="${TargetDir}" /> 
     </EnvironmentVariables> 
    </Command> 
    </CustomCommands> 
</CustomCommands> 

Si usted se pregunta por qué los <CustomCommands> elementos son de dos profundo, que un error conocido.

+0

¡Gracias! Funciona como se esperaba Tengo enlaces simbólicos a la compilación de depuración del complemento en el directorio AddIns, por lo que no he probado MONODEVELOP_DEV_ADDINS – simendsjo

+0

@mhutch Sugerencia genial, gracias. Configurar 'MONODEVELOP_DEV_ADDINS' funciona, pero solo una vez. A menos que salga de todas las instancias de MD, incluida la instancia con el proyecto de complemento, solo se recogerá el primer complemento compilado. ¿Hay algún complemento de almacenamiento en caché? –

+0

Nota, esto está en OSX. En Windows funciona. Cada nueva compilación es captada por el nuevo XS –

0

el depurador suave todavía no soporta System.Diagnostics.Debugger.break(), por lo que no va a funcionar.

Solo necesita depurar MonoDevelop dentro de MonoDevelop y establecer sus puntos de interrupción en los archivos fuente de su complemento.

+1

¿Podría explicar eso? 'Ejecutar> Aplicación de depuración> MonoDevelop.exe' no hace nada ... – simendsjo

Cuestiones relacionadas