我正在vc2008中构建我的应用程序并在机器网络上进行测试.
除了安装Visual Studio 2008之外,还有什么方法可以在另一台机器上运行C++程序的调试版本?(即没有安装vc2008)
安装redist软件包只会为vc2008程序安装发布模式支持DLL.目前它抱怨"此应用程序无法启动,因为应用程序配置不正确.重新安装应用程序可能会解决此问题.",我假设是"我缺少DLL"的代码.
你不能,因为调试运行时没有安装程序redist(实际上软件许可证禁止分发它,所以即使你确实把它放在了一起,你也会打破EULA).但是,"调试构建"通常涉及4个单独的选项,而其他3个不影响分发应用程序.
生成.pdb文件(cl/Zi和link/DEBUG),允许进行符号调试.您可能想要添加/ OPT:ref到链接器选项; 链接器在不创建.pdb文件时删除未引用的函数,但是使用/ DEBUG模式它会保留它们(因为调试符号引用它们),除非你明确地添加它.
我通常使用我的所有构建,甚至是生产构建.只要你使用/ OPT重新启用链接器优化:ref它实际上不需要任何费用,如果你最终想要读取崩溃转储,那么使用这些符号会很方便.
使用C运行时库的调试版本(可能是MSVCR*D.dll,但它取决于您使用的运行时).这可归结为/ MT或/ MTd(如果不使用dll运行时,则为其他内容).
这意味着你不能再重新分配东西了.它还对一些libraty函数的性能产生巨大影响,特别是内存分配.调试运行时版本小心地"中毒"它们与值接触的内存,以使未初始化的数据错误清晰,释放的版本通常会保留旧数据,以节省触及它的时间.我相信在MSVCP*STL实现中,调试版本也省略了通常所做的所有分配池,因此泄漏检查器可以准确显示您认为的块,而不是它已经分配的一大块内存,但这意味着它会使更多对malloc的调用变得更慢.如果您有指针或迭代器处理错误,这可能会影响您获得的错误行为.
关闭编译器优化(/ Od).
这个做了很多事情(这个问题对这个问题有一些很好的讨论),但基本上它会伤害性能.很多.不幸的是,如果你想要单步进行顺利工作,那就需要它.
设置预处理器#defines DEBUG或NDEBUG.
这会以各种方式影响许多库,但最值得注意的是它编译或消除assert()和朋友.
因此,您可以考虑使用这些选项中较少的组合进行构建.我大量使用带有符号(/ Zi和link/DEBUG)和断言(/ DDEBUG)的构建,但仍然进行了优化(/ O1或/ O2或您使用的任何标志)但是保留了堆栈帧指针清除回溯(/ Oy-)并使用正常的运行时库(/ MT).这接近我的发布版本并且是半可调试的(回溯很好,单步执行在源级别有点古怪;当然,程序集级别工作正常).您可以拥有许多您想要的配置; 只需克隆你的第一个版本并打开调试的任何部分似乎都很有用.
唯一会影响尝试重新分发应用程序的是2.
如果您尝试在另一台计算机上进行调试,您可能也对msvsmon感兴趣.