从本地进行调试和启动时,clr.dll中的C#4.7.2崩溃

时间:2018-07-06 11:25:10

标签: c# clr unmanagedexports

我有一个混合模式项目,我在其中启动本机c ++代码并加载和使用一些c#4.7.2程序集。很长时间以来,它都运行良好,但是我偶然发现了一个问题。 仅C#单元测试可以正常工作。禁用混合模式调试时,仅C ++单元测试调用托管工作正常。启用混合模式调试时,可以从本机do manage开始进行调试会话,但是遇到某些特定的代码段时,我会出现clr.dll崩溃,地址0上存在访问冲突:

  

在以下位置抛出异常:0x00007FFAF53A2774(clr.dll)   server_unittests.exe:0xC0000005:访问冲突读取位置   0x0000000000000000

它是确定性的,并在从派生类中调用基本构造函数时发生。

代码可以正常工作,没有任何泄漏,也可以调试,但是从非托管状态启动会话时,代码就会死掉。大致如下:

public DerivedData(uint customerId, bool load) : public BaseData(int customerId, string idName, string table, HashSet<(string colName, Constants.DbTypes colType, bool client, int verbosity)> vars, BaseData initialValues = null)

并在应进入基类构造函数代码时崩溃。

对于人与人桥,我使用3F / DllExport项目。我有最新的vs 2017。

请帮助我找到导致崩溃的模式,或将其指向一些GUI配置,使其消失:)

在一些选项旋转之后,它开始引发另一个错误:

托管调试助手“ FatalExecutionEngineError”已在“ server_unittests.exe”中检测到问题。 附加信息:运行时遇到致命错误。错误的地址位于线程0x1a6c上的0xf53a2774。错误代码为0xc0000005。此错误可能是CLR或用户代码中不安全或不可验证部分的错误。该错误的常见来源包括COM-interop或PInvoke的用户封送处理错误,这些错误可能会破坏堆栈。

0 个答案:

没有答案