c# - proceso - visual studio attach to process
Parece que VS2013 no se ha adjuntado correctamente: se ha adjuntado un depurador pero no está configurado para depurar esta excepción no controlada (1)
Mientras codifico una aplicación de consola, estoy usando una DLL de SAP. Recibo el siguiente error al intentar agregar un objeto SAP:
Un depurador está conectado pero no está configurado para depurar esta excepción no controlada. Para depurar esta excepción, separe al depurador actual.
Código:
SAPbobsCOM.GeneralService oGeneralService = oCmpSrv.GetGeneralService("WEPPAGE");
SAPbobsCOM.GeneralData oGeneralData = (SAPbobsCOM.GeneralData)oGeneralService.GetDataInterface(di.GeneralServiceDataInterfaces.gsGeneralData);
oGeneralData.SetProperty("U_WebId", "1");
try
{
oGeneralService.Add(oGeneralData);
}
catch (Exception e)
{
Logger.WriteLog("Error Add object " + e.Message);
}
Aunque el código está envuelto con try & catch , el IDE se bloquea.
Después de muchas búsquedas y sugerencias en la web, lo que no ayudó, encontré esta publicación, apliqué la solución sugerida y habilité la depuración de código nativo en la pestaña de depuración de propiedades del proyecto.
El resultado de marcar esta opción fue que, en lugar de dejarme depurar el error desconocido, la excepción simplemente "desapareció" y el código se ejecuta sin interferencias.
Preguntas
- ¿Por qué la excepción desaparece y no se depura?
- ¿Es posible tener una solución alternativa diferente para este problema ya que habilitar la depuración del código nativo está ralentizando la aplicación en 10 veces y no es una solución real para este problema?
Aunque el código está envuelto con try & catch, el IDE se bloquea
No, el cuadro de diálogo WER muestra que es su programa el que se bloqueó, no el IDE. No su código, OBServerDLL es un componente de SAP. Y dada la naturaleza del bloqueo, el uso de try / catch no podrá detectar esta excepción, se produce en un subproceso de trabajo dentro del código SAP.
Tenga en cuenta que el motivo del fallo es muy desagradable, el código de excepción c0000005
es el equivalente a una excepción AccessViolationException. La razón habitual para ello es la corrupción de la memoria. Nunca atrapes una excepción como esa, tu programa no puede continuar operando de manera significativa.
¿Por qué la excepción desaparece y no se depura?
Esto ciertamente no se supone que suceda, muy poco saludable. Los AVE tienden a ser más bien aleatorios, la corrupción de la memoria no garantiza un bloqueo. Tenga en cuenta que cuando ocurre mientras realiza la depuración, entonces aún no puede descubrir nada sobre el motivo, no tiene el código fuente para OBServerDLL.
habilitar la depuración del código nativo está ralentizando la aplicación en 10x
Eso es bastante improbable, a menos que el código nativo esté lanzando excepciones a una tasa muy alta. Algo que puedes ver fácilmente en la ventana de resultados. Lo que hace es ralentizar el inicio de su sesión de depuración. El depurador intentará encontrar PDB para todos los ejecutables nativos, no va a encontrar nada en el código de Microsoft Symbol Server para SAP. La forma más sencilla de evitar ese retraso es utilizando Herramientas> Opciones> Depuración> Símbolos, desmarque la opción "Servidores de símbolos de Microsoft".
Esta pregunta en los foros de soporte de SAP sería algo comparable. También el mejor lugar para encontrar ayuda con un problema como este. Si bien es probable que necesite el apoyo de un ingeniero de escalamiento de SAP, necesitará un pequeño proyecto de repro y un minidump del proceso bloqueado.