混合模式调试(C++、C#、VB)

Posted

技术标签:

【中文标题】混合模式调试(C++、C#、VB)【英文标题】:Debugging in mixed-mode (C++, C#, VB) 【发布时间】:2020-12-01 12:23:27 【问题描述】:

This article 讨论启用混合模式调试。这允许托管应用程序调用本地 DLL,或本地应用程序调用托管 DLL。

为我的解决方案中的所有项目启用此功能是否会产生负面影响?例如,这是否会对性能、构建时间或构建期间访问磁盘的文件数量等产生负面影响?

上述文章没有讨论这个。

【问题讨论】:

在调试时,在不调试的情况下运行代码通常不会获得相同的性能。当您尝试运行代码而不进行调试并且它不起作用时,您只会遇到问题。那你要弄清楚为什么调试没有发现错误。 良好的托管模式可以这么说对设计性能产生负面影响,但我相信你知道这一点。 【参考方案1】:

构建时间:

独立于混合模式方面,常见调试配置的构建时间问题对于您的本机 dll/部分的 PDB 变得非常大的情况通常是合理的(但与常见的发布配置相比,通常相对无关紧要)。毫无疑问,这取决于许多方面(链接器配置、硬件、并行链接?)。以混合模式为重点,不应该有任何进一步的相关影响原因,因为托管部分无论如何都会提供 PDB 相应的信息。

运行时:

取决于很多方面。但是,是的,总的来说,至少与纯本机调试相比,您会在这里观察到(负面)影响,重点是性能和内存使用(!)。例如,至少以前的 MS-Debuggers(在 VS 2017 之前)在处理混合模式下的大型调试会话时存在几个相当严重的问题。一个常见的 - 对于初学者来说有时不容易看到 - 这里的性能下降器同样是托管和本机部分上的条件断点 - 迫使调试器非常频繁地切换其操作上下文(条件断点与“经典”断点具有几乎相同的性能影响) .

【讨论】:

以上是关于混合模式调试(C++、C#、VB)的主要内容,如果未能解决你的问题,请参考以下文章

FlutterFlutter 混合开发 ( Dart 代码调试 | Flutter 单独调试 | 混合模式下 Flutter 调试 )

Flutter混合开发模式下的代码调试

混合模式程序集未加载本机 C++ pdb 的符号

C#进阶系列29 混合线程同步构造

如何在 iPhone 上以调试/开发模式运行我的混合移动应用程序?

Chrome调试模式获取App混合应用H5界面元素