复现方法:CUI程序,DLL中的全局对象在析构时调用recursive_mutex::lock()函数,运行时通过Ctrl+C触发。
原因分析:DLL被释放时,会自动析构所有的全局对象。由于Ctrl+C的实现为系统创建一个远程线程调用dllmain并析构全局对象,而这个远程线程缺少一些必要的初始化过程,造成recursive_mutex::lock()函数崩溃。
以下是分析时的截图:
本文分析了CUI程序中DLL的全局对象在析构过程中调用recursive_mutex::lock()函数导致的崩溃问题。原因是当通过Ctrl+C触发DLL释放时,系统创建的远程线程未能正确初始化,进而引发recursive_mutex::lock()函数崩溃。
复现方法:CUI程序,DLL中的全局对象在析构时调用recursive_mutex::lock()函数,运行时通过Ctrl+C触发。
原因分析:DLL被释放时,会自动析构所有的全局对象。由于Ctrl+C的实现为系统创建一个远程线程调用dllmain并析构全局对象,而这个远程线程缺少一些必要的初始化过程,造成recursive_mutex::lock()函数崩溃。
以下是分析时的截图:
632
4643
125

被折叠的 条评论
为什么被折叠?