- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为 AutoCAD 2009 开发附加组件。项目输出是一个类库。当我尝试调试和加载类库时,我收到“检测到 LoaderLock 消息”。我一直在编写这些附加组件,这是我看到的第一条此类消息。
Debug -> Exceptions -> "Managed Debugging Assistants"
, 找到
"LoaderLock"
并取消选中
"Thrown"
复选框。
最佳答案
加载器锁是一个进程范围的锁,系统使用它来同步将 DLL 加载到进程地址空间的访问。加载 DLL 的函数、释放 DLL 的函数、查询 DLL 信息等,都获得了加载器锁。通常对开发人员影响最大的是在 DllMain 运行时也持有加载程序锁 - 这意味着在运行代码时可以持有您通常不知道的操作系统锁。
加载器锁可以被视为处于锁层次结构中的一个非常低的级别。在 DllMain 期间在加载程序锁下运行的代码可能是导致死锁的原因。例如,CLR 有它自己的一组内部锁,它可以在加载 DLL 时持有这些锁。如果从 DllMain 中调用托管代码,则可能导致线程上的 CLR 在持有加载程序锁的同时获取这些锁之一。如果另一个线程上的 CLR 已获取该锁(导致 DllMain 中的原始线程阻塞),然后尝试加载将获取加载器锁的 DLL,则您的进程将死锁。
听起来 CLR 正试图在加载器锁定下抢先检测正在运行的托管代码。当您在调试器中看到此故障的堆栈时,请确定导致您的托管代码从 DllMain 中运行的原因并将其删除。
关于visual-studio-2005 - 为什么我在调试时收到 "LoaderLock was detected"警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/889736/
我试图更详细地了解操作系统加载器锁是如何与 Windows 中的 DLL 加载和卸载相关的。 我知道当创建/销毁新线程和/或加载/卸载新 DLL 时,每个加载的 DLL 都会收到通知。 那么这是否意味
我最近将 .NET NLog 日志记录组件集成到我们的一个应用程序中,该应用程序完全使用非托管代码(在 Visual Studio 6 中编译的 C++ 和 VB6 组件)开发。我们有一堆 C++ 应
我正在用 C# 编写 WinForms 应用程序。 在应用程序中的某个时刻,我生成一个新的 STA 线程(创建线程,然后 SetApartmentState ),它创建一个新表单,然后用普通的旧 Sh
我正在为 AutoCAD 2009 开发附加组件。项目输出是一个类库。当我尝试调试和加载类库时,我收到“检测到 LoaderLock 消息”。我一直在编写这些附加组件,这是我看到的第一条此类消息。 我
我为非托管 C++ 库(与 C# 一起使用)制作了非常简单的包装器。 Wrapper 有一个非托管类和一个托管类。托管类具有非托管类的私有(private)成员并像那样使用它。 我已经完成了非常简单的
我正在尝试为 VS2010 编写一个扩展,但我每次都得到这个: 按 F5 开始调试 Visual Studio 的新实例启动 当新实例启动时,我可以看到调试主机中加载了一堆 DLL 然后它因“Load
我有几个使用 SQL CE 4.0 和 Entity Framework 的 MVC 项目。自从迁移到 Visual Studio 2012 以来,我不断收到以下错误(不是每次,但经常出现) 检测到
前段时间我发了一篇关于创建 dll 的帖子,用于注入(inject)目的,这将导致主机应用程序触发 Nvidia Optimus 笔记本电脑以“唤醒”dGpu。这是必要的,因为 nvidia 在这里创
我是一名优秀的程序员,十分优秀!