visual-studio - 当远程计算机上未安装 VS 时,使用 CRT 的 DEBUG 版本远程调试应用程序

标签 visual-studio visual-studio-2010 c++-cli 32bit-64bit remote-debugging

先说我可以 远程调试一个 发布 在远程计算机上构建。我set up my release build很像我的调试版本,但我主要必须确保未设置调试标志。我已经处理了一段时间,最后决定尝试弄清楚为什么我必须经历这个。我还应该提到,我的远程调试经验仅限于这个项目,并且 C# 程序使用 C++/CLI(使用/clr 构建).DLL 来调解一些关键的 C++ 库。我不需要调试底层的 C++ 库,但我需要调试 C++/CLI 代码。 (我提到这一点的一个原因是我无法在使用/clr 标志时静态链接库)。

我最近发现 Dependency Walker所以我用它来看看发生了什么。事实证明,在设置调试标志的情况下,链接器链接 MSVCR100D.DLL 和 MSVCP100D.DLL,当未设置标志时,它使用没有“D”后缀的文件。现在通常我可能只是将这些 .DLL 的版本复制到远程机器上,但有一个问题。我的 VS2010 开发笔记本电脑是 64 位机器,目标机器是 32 位。这意味着我拥有的那些 DLL 的唯一版本是 64 位。我已经在远程机器上安装了 VS2010 的远程调试(我在 2008 年遇到了同样的问题),但它也不包含这些 .DLL 的调试版本(我不确定为什么,但我假设这是由设计)。所以我的问题是:

  • 作为 VS2010 的注册所有者,是否有这些 .DLL 的 32 位版本的有效来源,我可以放在远程机器上?
  • 有没有更简单的方法让我获得调试支持?那我可以更改一些其他设置,只是告诉 VS 不要使用这两个 DLL 的调试版本吗?这里的优点是可以设置 DEBUG 符号,并且任何使用它的条件代码都可以工作。
  • 最佳答案

    CRT DLL 的调试版本在标准 Visual Studio 安装中都可用,包括 x86 版本,甚至在 64 位机器上也是如此。

    默认情况下,它们位于以下路径中:

    <Program Files folder>\Microsoft Visual Studio 10.0\VC\redist\Debug_NonRedist
    

    在该文件夹下,您将找到两个额外的文件夹( x64x86 ),其中包含这些 DLL 的各个平台的调试版本。

    但要特别注意文件夹的名称( Debug_NonRedist )。这表明这些调试 DLL 是 不可再分发 .拥有 VS 许可证的开发人员在另一台机器上测试他/她的代码时使用它们当然是可以的,但它们不应该分发到客户端机器并用于运行您的应用程序。 (从您的问题中您似乎知道这一点,但对于 future 的 Google 员工来说,无论如何都值得指出。)

    或者,您可以更改 Visual Studio 项目针对特定项目配置链接到的 CRT DLL 版本。这意味着您可以编译应用程序的“调试”版本,但告诉 Visual Studio 链接到 CRT 的完整可再发行版本。

    要做到这一点:
  • 在解决方案资源管理器中右键单击您的项目,然后选择“属性”。
  • 确保在对话框顶部的下拉框中选择了“调试”配置。
  • 展开 TreeView 中的“C/C++”项,并选择“Code Generation”。
  • 将“运行库”选项的设置更改为“多线程 DLL (/MD)”或“多线程 (/MT)”。

    请注意,您只是告诉 Visual Studio 不要使用每个选项的“调试”变体。他们仍然是同一个意思。第一个将动态链接到 DLL,第二个将 CRT 静态链接到您的应用程序。选择最适合您的情况的一种。 (我经常发现将我的“调试”构建配置为静态链接这样的实例很方便。)

  • 关于visual-studio - 当远程计算机上未安装 VS 时,使用 CRT 的 DEBUG 版本远程调试应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6794434/

    相关文章:

    c++ - CMake source_group() 在分层项目设置中无法正常工作

    c++ - 默认构造函数的好奇心

    html - Visual Studio 2008 HTML 格式 - 它是否有效?

    c++ - 需要为单个解决方案Visual studio 2010的所有项目设置comman库文件

    C程序编译错误

    c# - Visual Studio 6 中 C++ 项目的推荐迁移策略

    c# - 将 C++/CLI 中的动态对象返回到 C#

    types - 为什么在使用 std::max 和 c++/CLI 时不能编译?

    c# - 泛型类上的 DebuggerDisplay

    c# - 调试 WCF 服务时出现问题