当前位置:  开发笔记 > 后端 > 正文

在非开发机器上运行vc2008 debug

如何解决《在非开发机器上运行vc2008debug》经验,为你挑选了1个好方法。

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

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

安装redist软件包只会为vc2008程序安装发布模式支持DLL.目前它抱怨"此应用程序无法启动,因为应用程序配置不正确.重新安装应用程序可能会解决此问题.",我假设是"我缺少DLL"的代码.



1> puetzk..:

你不能,因为调试运行时没有安装程序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感兴趣.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有