Win32控制台应用程序与CLR控制台应用程序

bso*_*man 21 .net c++ debugging console-application visual-studio

我正在开发一个我不打算使用.NET库或工具开发或部署的C++项目,这意味着使用Visual Studio Win32控制台应用程序创建它是有意义的.但是,我听说在Visual Studio下使用CLR应用程序时的调试功能要强大得多.所以我有几个问题:

  1. 即使您不使用任何.NET库或其他资源,拥有CLR应用程序与Win32应用程序是否也能为您的开发过程增加功能?

  2. 如果是这样,我是否仍然可以将项目开发/编译为CLR项目以利用这些,即使我正在使用STL等开发纯C++项目而不利用任何.NET功能?或者这样的项目是否需要基本的差异,这将使回归变得非常重要,这意味着我应该坚持使用Win32控制台应用程序?

Jar*_*Par 25

回到顶端,如果您从不打算在应用程序中使用CLR或任何.Net对象,只需使用普通的Win32 C++库.做其他事情会让你痛苦不堪.

现在,为了回答有关调试的原始问题,使用CLR进行调试与调试普通C++应用程序相比具有一定的优势.从Visual Studio 2005开始,C#和VB.Net开始专注于使locals/autos/watch窗口中的变量显示更有价值.它主要是通过引入.Net属性,如DebuggerDisplay,DebuggerTypeProxy和可视化框架来完成的.

如果您不使用任何.Net类型,您将无法获得这些好处.

C++表达式求值程序不利用任何这些.它有自己定制类型显示的方法.但它不像属性样式那样具有特征性(或潜在危险性),因为它不允许代码在debugee过程中运行.

这并不是说调试C++提供了糟糕的体验.它仅仅是不同的,并且对于许多STL容器类型有更好的显示.

调试CLR应用程序也有一些不利因素.例如,调试优化代码有时几乎不可能,因为JITer将隐藏局部变量,参数并且通常是"this".调试类似构造的C++应用程序也可能令人沮丧,但您总是可以抓住寄存器并且不知不觉地看看发生了什么.对CLR应用程序执行相同操作很困难.