首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Environment.Exit(0)升级Boost/.NET/编译器版本后挂起我的应用程序

Environment.Exit(0)升级Boost/.NET/编译器版本后挂起我的应用程序
EN

Stack Overflow用户
提问于 2014-12-16 17:29:00
回答 1查看 719关注 0票数 0

我有一个WinForms应用程序,它使用几个C++/CLI,它们依次与Boost链接。由于Boost或std库的一些奇怪之处,当我正常退出这个应用程序时(即使是在它加载之后),它会因为双释放C++语言环境方面而崩溃。为了解决这个问题,我开始使用Process.GetCurrentProcess().Kill(),但是后来当我需要一个正常的出口来有一个0退出代码(即用于自动测试)时,我转而使用Environment.Exit(0)

我刚刚将依赖项从用VS 2010编译的.NET 4和Boost 1.54升级为.NET 4.5,并将使用VS 2013编译的Boost 1.56进行了升级。在升级之前,Environment.Exit(0)运行良好。升级之后,它将无限期挂起。当我切换回Process.GetCurrentProcess().Kill()时,它会很好地退出(除了退出代码)。当我让它在没有任何解决方法的情况下正常关闭时,我仍然会遇到locale崩溃(所以我猜Boost或std C++中的问题没有得到解决)。所以我仍然需要解决办法来工作。

我观察到一些奇怪的事情:

  • 当我关闭程序并挂起时,打开中进程的Thread选项卡,进程将完成关闭
  • 当我打开进程的线程选项卡,然后关闭程序,它挂起;即使我从线程选项卡切换回来,它仍然挂起
  • 在后一种情况下,仍有一个线程在运行(或等待)。线程的起始地址是"!.ctor“。对某些Boost代码的InteropQonverter.dll调用引起了我的注意,但我不知道它是否是一个准确的堆栈跟踪,因为这是一个发布版本。InteropQonverter.dll显然是我的C++/CLI之一。但是它不使用boost::serialization AFAIK。

你知道是什么原因造成的吗?或者如何解决它?

编辑:这是来自调试构建的堆栈跟踪,它具有相同的症状。更有意义的是,它挂在我的DLL的CRT中。它似乎抛出了一个异常,但我抓不到它?

代码语言:javascript
运行
复制
ntdll.dll!ZwDelayExecution()  + 0xa bytes   
KernelBase.dll!SleepEx()  + 0xb3 bytes  
ntdll.dll!RtlpExecuteHandlerForException()  + 0xd bytes 
ntdll.dll!RtlDispatchException()  + 0x38f bytes 
ntdll.dll!KiUserExceptionDispatch()  + 0x2e bytes   
KernelBase.dll!RaiseException()  + 0x3d bytes   
InteropQonverter.dll!_CRT_INIT(void * hDllHandle, unsigned long dwReason, void * lpreserved)  Line 415  C
InteropQonverter.dll!__DllMainCRTStartup(void * hDllHandle, unsigned long dwReason, void * lpreserved)  Line 526 + 0x13 bytes   C
InteropQonverter.dll!_DllMainCRTStartup(void * hDllHandle, unsigned long dwReason, void * lpreserved)  Line 477 C
mscoreei.dll!000007fef8405795()     
[Frames below may be incorrect and/or missing, no symbols loaded for mscoreei.dll]  
mscoree.dll!ShellShim__CorDllMain()  + 0xe1 bytes   
mscoree.dll!_CorDllMain_Exported()  + 0x37 bytes    
ntdll.dll!LdrShutdownProcess()  + 0x1d1 bytes   
ntdll.dll!RtlExitUserProcess()  + 0x90 bytes    
mscoreei.dll!000007fef83f3067()     
mscoreei.dll!000007fef83f3300()     
mscorlib.ni.dll!000007fef706188b()  
[Managed to Native Transition]  
mscorlib.dll!System.Environment.Exit(int exitCode) + 0x7b bytes 
IDPicker.exe!IDPicker.IDPickerForm.IDPickerForm_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e) Line 1593 + 0x7 bytes   C#
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-19 18:54:02

我追踪到了一个“无效字符串绑定”错误,这就是我首先添加Kill()/Exit()调用的原因。然后,当我在:0xC0020001: The string binding is invalid. - Only occurring in WPF (我在C++/ClI的链接器选项中添加了/NOENTRY )时,我显然改变了一些东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27510456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档