visual-studio - 在非开发机器上运行 vc2008 调试构建

标签 visual-studio visual-studio-2008 debug-build

我正在 vc2008 中构建我的应用程序并在机器网络上对其进行测试。

除了安装 Visual Studio 2008 之外,还有什么方法可以在另一台机器上运行 C++ 程序的调试版本? (即没有安装vc2008)

安装 redist 软件包只会安装 vc2008 程序的 Release模式支持 DLL。目前它提示“此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题。”,我认为这是“我缺少 DLL”的代码。

最佳答案

你不能,因为调试运行时没有安装程序 redist(实际上软件许可证禁止分发它,所以即使你确实把一些东西放在一起,你也会违反 EULA)。但是,“调试构建”通常涉及 4 个单独的选项,其他 3 个不影响分发应用程序。

  • 生成一个允许符号调试的 .pdb 文件(cl/Zi 和链接/DEBUG)。您可能希望将/OPT:ref 添加到链接器选项;链接器在不创建 .pdb 文件时会删除未引用的函数,但在/DEBUG 模式下它会保留所有函数(因为调试符号引用了它们),除非您明确添加。

    我通常对我的所有构建都执行此操作,甚至是生产版本。只要您使用/OPT:ref 重新打开链接器优化,它实际上不会花费任何成本,并且如果您最终想要读取故障转储,则拥有这些符号会很方便。
  • 使用 C 运行时库的调试版本(可能是 MSVCR*D.dll,但这取决于您使用的运行时)。这归结为/MT 或/MTd (或其他东西,如果不使用 dll 运行时)。

    这意味着你不能再重新分配东西了。它还对一些库函数的性能产生巨大影响,尤其是内存分配。调试运行时版本小心地用值“毒化”它们接触的内存,以清除未初始化的数据错误,发布版本通常保留旧数据以节省接触它的时间。我相信使用 MSVCP* STL 实现,调试版本也省略了所有通常完成的分配池,因此泄漏检查器可以准确地显示您认为的 block ,而不是它一直在分配的更大的内存块,但这意味着它会在更慢的情况下对 malloc 进行更多调用。如果你有指针或迭代器处理错误,这可能会影响你得到什么样的不当行为。
  • 关闭编译器优化 (/Od)。

    这个做了很多事情(this question 对这个主题有一些很好的讨论),但基本上它会损害性能。很多。不幸的是,如果您希望单步运行顺利,则需要它。
  • 设置预处理器#defines DEBUG 或 NDEBUG。

    这以各种方式影响了许多库,但最值得注意的是它编译或消除了 assert() 和 friend 。

  • 因此,您可能会考虑使用这些选择的较少组合进行构建。我大量使用具有符号(/Zi 和链接/DEBUG)和断言(/DDEBUG)的构建,但仍然优化(/O1 或/O2 或您使用的任何标志)但堆栈帧指针保留用于清除回溯 (/Oy-) 并使用正常的运行时库 (/MT)。这执行接近我的发布版本并且是半可调试的(回溯很好,单步执行在源代码级别有点古怪;组装级别当然可以正常工作)。你可以有很多你想要的配置;只需克隆您的发行版并打开调试的任何部分似乎有用。

    唯一会影响尝试重新分发应用程序的是 2。

    如果您尝试在另一台机器上调试,您可能还对 msvsmon 感兴趣.

    关于visual-studio - 在非开发机器上运行 vc2008 调试构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/264385/

    相关文章:

    android - Xamarin 示例应用程序不显示任何内容

    C# - 是否真的需要在 .net 中调试构建

    c++ - 在 Qt Debug 构建中运行项目后,二进制文件 (exe) 消失并且目标文件缩小。如何解决?

    visual-studio-2008 - Visual Studio 不会打开解决方案文件

    c# - 用于共享第 3 方 DLL 的 NuGet 或程序集文件夹?

    c# - 如何禁用 Visual Studio 2015 中的所有空格自动格式化?

    visual-studio - 关于visual studio的debug UI

    visual-studio-2008 - 单元测试和 VS 2008

    c++ - 如何自定义监 window 口格式