【问题标题】:Remote debugging an app with the DEBUG versions of the CRT when VS is not installed on the remote machine当远程计算机上未安装 VS 时,使用 CRT 的 DEBUG 版本远程调试应用程序
【发布时间】:2011-10-11 06:53:41
【问题描述】:

首先让我说我可以在远程计算机上远程调试发布版本。我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 的调试版本(我不知道为什么,但我假设这是由设计)。所以我的问题是:

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

【问题讨论】:

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


    【解决方案1】:

    CRT DLL 的调试版本都可通过标准 Visual Studio 安装获得,包括 x86 版本,即使在 64 位机器上也是如此。

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

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

    在该文件夹下,您会发现另外两个文件夹(x64x86),其中包含针对各个平台的这些 DLL 的调试版本。

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


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

    这样做:

    1. 在解决方案资源管理器中右键单击您的项目并选择“属性”。

    2. 确保在对话框顶部的下拉框中选择了“调试”配置。

    3. 在TreeView中展开“C/C++”项,选择“代码生成”。

    4. 将“运行时库”选项的设置更改为“多线程 DLL (/MD)”或“多线程 (/MT)”。

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

    【讨论】:

    • 1K 谢谢。我确实觉得有点像一个白痴,因为我没有注意到 Runtime Library 选项(因为我使用那个弹出窗口来尝试 MT 选项)。我猜是一种奇怪的隧道视力失明。我选择将非 redist 版本放在远程机器上的调试文件夹中。在我将机器运送给客户之前,该文件夹将被删除,我将继续受到 MS 的青睐。
    • @Tod:当然;不客气。这就是这个网站的用途,真的。这对我来说听起来是一个很好的解决方案;我已经在静态链接不起作用的项目中做到了这一点。 (我刚刚注意到我错过了您解释为什么不能静态链接的问题中的那部分。)
    【解决方案2】:

    这个问题是针对旧版本的 Visual Studio,但如果有人来这里是为了更新版本(就像我一样),有内置支持来部署您在 VS 2013(可能更早)中需要的调试 DLL )。这是一个明显的设置,但如果一个人匆匆忙忙(就像我一样),很容易错过。所以也许这会对某人有所帮助。

    在属性页的Debugging下,当Debugger to launch设置为Remote Windows Debugger时,在属性列表中有一个名为Deploy Visual C++ Debug Runtime Libraries的选项。只需将其设置为Yes

    更新 -- 根据要求,这是为了澄清我指的是哪些属性页,以及如何访问它们:在 Solution Explorer 中,右键单击启动项目(粗体),然后单击上下文菜单上的属性。 属性页 窗口出现。在左侧面板中,展开Configuration Properties,然后选择Debugging,即Configuration Properties下的第二项。

    编辑更新:我通过通知来到这里,并没有看到我可以说“请参阅 Cody Gray 的回答以获取窗口图片”来满足要求澄清。但是,无论如何,如果有人需要它,还是有方法的。

    【讨论】:

    • 你能更具体一点吗?究竟是哪些属性页?
    • 已更新。该窗口称为 Property Pages,它的描述性可能并不那么全面,因此我列出了如何访问该窗口。
    猜你喜欢
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 2011-11-16
    • 2021-06-20
    • 2022-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多