先说我可以 远程调试一个 发布 在远程计算机上构建。我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 的调试版本(我不确定为什么,但我假设这是由设计)。所以我的问题是:
最佳答案
CRT DLL 的调试版本在标准 Visual Studio 安装中都可用,包括 x86 版本,甚至在 64 位机器上也是如此。
默认情况下,它们位于以下路径中:
<Program Files folder>\Microsoft Visual Studio 10.0\VC\redist\Debug_NonRedist
在该文件夹下,您将找到两个额外的文件夹(
x64
和 x86
),其中包含这些 DLL 的各个平台的调试版本。但要特别注意文件夹的名称(
Debug_NonRedist
)。这表明这些调试 DLL 是 不可再分发 .拥有 VS 许可证的开发人员在另一台机器上测试他/她的代码时使用它们当然是可以的,但它们不应该分发到客户端机器并用于运行您的应用程序。 (从您的问题中您似乎知道这一点,但对于 future 的 Google 员工来说,无论如何都值得指出。)或者,您可以更改 Visual Studio 项目针对特定项目配置链接到的 CRT DLL 版本。这意味着您可以编译应用程序的“调试”版本,但告诉 Visual Studio 链接到 CRT 的完整可再发行版本。
要做到这一点:
请注意,您只是告诉 Visual Studio 不要使用每个选项的“调试”变体。他们仍然是同一个意思。第一个将动态链接到 DLL,第二个将 CRT 静态链接到您的应用程序。选择最适合您的情况的一种。 (我经常发现将我的“调试”构建配置为静态链接这样的实例很方便。)
关于visual-studio - 当远程计算机上未安装 VS 时,使用 CRT 的 DEBUG 版本远程调试应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6794434/