c# - 调试 COM 对象析构函数时发生奇怪的崩溃

标签 c# c++ visual-studio-2010 com

我的应用程序混合了 C# 和 C++ 代码。用C#编写的启动模块在初始化阶段通过COM(Component Object Model)机制加载C++模块。在我决定向 C# 部分添加 wcf 服务之前,一切都正常运行。所有 wcf 服务调用都使用 COM 路由到 C++ 代码。添加一些新方法后,我注意到输出窗口中存在内存泄漏。所以我在 C++ 类的析构函数中添加了断点,从屏幕截图中可以看出。从这一点开始,奇怪的事情开始发生。程序到达断点后意外崩溃。第一件奇怪的事情是,当我在没有设置断点的情况下运行程序时,它会优雅地结束。第二个奇怪的事情是程序崩溃的方式就像它在没有调试器的情况下运行一样。单击“在调试器中打开”按钮(或类似的按钮)后,我收到错误消息:“程序已在调试器下打开。”输出窗口中没有任何消息可以指出错误的来源,没有可疑代码。 当向析构函数开始添加消息框时,它会显示几分之一秒,然后整个应用程序关闭(不增加用户阅读消息框中显示的内容的机会)。拼命寻找任何线索。

附言仅当至少调用一次 wcf 方法时才会出现问题。不依赖于此特定调用中的程序流是否路由到 C++ 级别。

enter image description here

enter image description here

最佳答案

从 C++ 调用 C# 时,垃圾收集器有时无法在程序结束前正确调用。尝试在 C# 代码末尾强制进行垃圾回收。

关于c# - 调试 COM 对象析构函数时发生奇怪的崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7148341/

相关文章:

C# Datetime 到 ODBC Datetime 转换错误

c++ - 具有不可移动/可复制类型的 std::tuple

c++ - 获取App路径,末尾不带应用名称

visual-studio-2010 - 将 VC++ 项目从 VS 2008 升级到 VS 2010

c++ - '$OutDir'在Visual Studio的脚本文件中定义在哪里?

c# - 在 C# 代码中引用 jquery 变量 (ASP.NET MVC)

c# - EF Core Sqlite 中的 Linq 查询不起作用

c# - 如何在 C# 中将大十进制数转换为十六进制数(例如 : 588063595292424954445828)

c++ - 序列化和反序列化 uint64_t - 不同平台上的不同结果

.net - 如何控制 .NET 服务引用的文件名?