我正在 vc2008 中构建我的应用程序并在机器网络上对其进行测试。
除了安装 Visual Studio 2008 之外,还有什么方法可以在另一台机器上运行 C++ 程序的调试版本? (即没有安装vc2008)
安装 redist 软件包只会安装 vc2008 程序的 Release模式支持 DLL。目前它提示“此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题。”,我认为这是“我缺少 DLL”的代码。
最佳答案
你不能,因为调试运行时没有安装程序 redist(实际上软件许可证禁止分发它,所以即使你确实把一些东西放在一起,你也会违反 EULA)。但是,“调试构建”通常涉及 4 个单独的选项,其他 3 个不影响分发应用程序。
我通常对我的所有构建都执行此操作,甚至是生产版本。只要您使用/OPT:ref 重新打开链接器优化,它实际上不会花费任何成本,并且如果您最终想要读取故障转储,则拥有这些符号会很方便。
这意味着你不能再重新分配东西了。它还对一些库函数的性能产生巨大影响,尤其是内存分配。调试运行时版本小心地用值“毒化”它们接触的内存,以清除未初始化的数据错误,发布版本通常保留旧数据以节省接触它的时间。我相信使用 MSVCP* STL 实现,调试版本也省略了所有通常完成的分配池,因此泄漏检查器可以准确地显示您认为的 block ,而不是它一直在分配的更大的内存块,但这意味着它会在更慢的情况下对 malloc 进行更多调用。如果你有指针或迭代器处理错误,这可能会影响你得到什么样的不当行为。
这个做了很多事情(this question 对这个主题有一些很好的讨论),但基本上它会损害性能。很多。不幸的是,如果您希望单步运行顺利,则需要它。
这以各种方式影响了许多库,但最值得注意的是它编译或消除了 assert() 和 friend 。
因此,您可能会考虑使用这些选择的较少组合进行构建。我大量使用具有符号(/Zi 和链接/DEBUG)和断言(/DDEBUG)的构建,但仍然优化(/O1 或/O2 或您使用的任何标志)但堆栈帧指针保留用于清除回溯 (/Oy-) 并使用正常的运行时库 (/MT)。这执行接近我的发布版本并且是半可调试的(回溯很好,单步执行在源代码级别有点古怪;组装级别当然可以正常工作)。你可以有很多你想要的配置;只需克隆您的发行版并打开调试的任何部分似乎有用。
唯一会影响尝试重新分发应用程序的是 2。
如果您尝试在另一台机器上调试,您可能还对 msvsmon 感兴趣.
关于visual-studio - 在非开发机器上运行 vc2008 调试构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/264385/