- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试诊断我们目前无法在调试环境中重现的客户端崩溃。
我正在尝试确定如果未附加调试器,CallbackOnCollectedDelegate
MDA 通知(由第三方代码产生)是否会导致崩溃。
因此,问题是,第三方代码中导致收集的委托(delegate)回调的问题是否是此行为的原因 - 调试时出现 MDA 而未调试时出现客户端崩溃?
有关此 MDA 的信息:http://msdn.microsoft.com/en-us/library/43yky316(v=vs.80).aspx
最佳答案
如果您收到 MDA 警告,那么您肯定重现了该问题。是的,如果没有调试器,那将是一次严重的崩溃, native 代码在进行回调时会崩溃。将调用从 native 代码编码到托管代码的 stub 不再存在。 AVE 的可能性很高,尽管永远不会 100% 保证,因为在收集 stub 后重新使用内存位置时,内存位置可能引用有效地址。随机代码执行就是失败模式。这两种结果都非常丑陋且难以诊断,永远不要让它走到这一步。
这是由于没有存储对您传递给 native 代码的委托(delegate)的引用造成的。或者不让存储引用的对象保持事件状态,同样的事情。垃圾收集器看不到也不知道 native 代码正在使用 stub 。事实上,CLR 在收集委托(delegate)时销毁 stub ,这就是它管理 stub 的内存分配的方式。
您有责任确保这种情况不会发生。最常见的正确解决方案是将委托(delegate)对象引用存储在私有(private) static
变量中。只有当您明确告诉 native 代码不再进行回调时,才将其设置回 null
。从不将其设置回 null 是很常见的。还要添加一个测试以确保它在分配变量之前为 null,如果不是则抛出 InvalidOperationException。如果您需要额外的间接级别,请使用 GCHandle.Alloc(Object)
。相同的配方,在确定它是安全的之前不要调用 Free()。
关于c# - CallbackOnCollectedDelegate - 当没有附加调试器时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5621483/
我正在使用 Gunicorn 为 Django 应用程序提供服务,它工作正常,直到我将其超时时间从 30 秒更改为 900000 秒,我不得不这样做,因为我有一个用例需要上传和处理一个巨大的文件(过程
我有一个带有非常基本的管道的Jenkinsfile,它可以旋转docker容器: pipeline { agent { dockerfile { args '-u root' } } stag
在学习 MEAN 堆栈的过程中,我遇到了一个问题。每当我尝试使用 Passport 验证方法时,它都不会返回任何响应。我总是收到“localhost没有发送任何数据。ERR_EMPTY_RESPONS
在当今的大多数企业堆栈中,数据库是我们存储所有秘密的地方。它是安全屋,是待命室,也是用于存储可能非常私密或极具价值的物品的集散地。对于依赖它的数据库管理员、程序员和DevOps团队来说,保护它免受所
是否可以创建像图片上那样的边框?只需使用 css 边框属性。最终结果将是没 Angular 盒子。我不想添加额外的 html 元素。我只想为每个 li 元素添加 css 边框信息。 假设这是一个 ul
我是一名优秀的程序员,十分优秀!