在编写控制台应用程序时,我正在使用SAP DLL。 尝试添加SAP对象时出现以下错误:
附加调试器但未配置为调试此未处理的异常。要调试此异常,请分离当前的调试器。
代码:
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);
}
尽管代码包含在 try& catch 中,但IDE崩溃了。
在网络上进行了许多搜索和建议之后,我没遇到任何帮助,我遇到了this post并应用了建议的解决方案并在项目属性调试选项卡下启用了本机代码调试。
勾选此选项的结果是,不是让我调试未知错误,而是异常“消失”,代码运行时没有干扰。
答案 0 :(得分:15)
虽然代码是用try& catch包装的,但IDE会崩溃
不,WER对话框显示您的程序崩溃了,而不是IDE。不是您的代码,OBServerDLL是SAP组件。鉴于崩溃的性质,使用try / catch无法捕获此异常,它发生在SAP代码内的工作线程上。
请记住崩溃原因非常讨厌,异常代码c0000005
等同于AccessViolationException。通常的原因是内存损坏。永远不要抓住这样的例外,你的程序无法有意义地继续运行。
为什么异常消失而且没有调试?
这肯定是不应该发生,非常不健康。 AVE确实倾向于随机,内存损坏并不能保证崩溃。请记住,当您在调试时发生 时,您仍然无法找到有关原因的任何内容,您没有OBServerDLL的源代码。
启用本机代码调试会使应用程序速度降低10倍
这是不太可能的,除非本机代码以非常高的速率抛出异常。您可以在“输出”窗口中轻松查看的内容。 做所做的是减慢调试会话的启动速度。调试器将尝试为所有本机可执行文件查找PDB,它不会在Microsoft Symbol Server for SAP代码中找到任何内容。避免延迟的最简单方法是使用工具>选项>调试>符号,取消选中“Microsoft Symbols Servers”选项。
SAP支持论坛上的This question在某种程度上具有可比性。也是找到像这样的问题的帮助的最佳地方。虽然您可能需要SAP升级工程师的支持,但他需要一个小型的repro项目和崩溃过程的小型化。