如何减少c++程序的崩溃
How to reduce the crash of the C++ program
我有一个用c++实现的大软件,由VC10 SP1构建。源代码有超过1500万行。它交付给Windows平台,包括win32和x64。从崩溃报告来看,平均崩溃时间只有40分钟左右。
我想尽量减少崩溃,延长平均崩溃时间。谁能分享一下你在实践中做了什么或者有什么建议吗?如有任何意见,欢迎。
谢谢,Jeffrey
这就是所谓的调试,或者说是寻找bug的艺术。
有许多方法可以提高软件质量。
设计阶段:
- 设计评论 代码检查
- 静态分析工具
生命早期:
- 单元测试
- 模糊测试(如适用)
- 集成测试 端到端测试
所有代码都可以在仪表化的代码上运行(例如,激活STL调试,使用特定的调试内存分配器,连接监视工具/调试器)。
注意:如果应用程序有多个组件,单元/模糊测试更容易适用,因为目标是测试尽可能小的单元。
注意:当您实现新功能或修复错误以防止回归时,不要忘记扩展测试套件。
在生命中:
- 人类碰撞报告(并试图复制…)不是那么有效
- 自动崩溃报告(有实用程序在Windows上)是真正的好
培养质量取决于你。
仅供参考:我工作的软件运行24小时/7天,当我们一周有一两次崩溃时,我们认为我们搞砸了;45分钟绝对是错误的
"延长平均崩溃时间"?如何修复代码,使其不会崩溃?巨魔的问题吗?
如果不是,则听起来像是内存泄漏。通过内存分析器运行它:http://en.wikipedia.org/wiki/List_of_performance_analysis_tools#C_and_C.2B.2B
一些建议(在明显的调试旁边):
- 激活某些警告并尽可能地解决它们。
- 使用静态代码分析(例如pc-lint)
- 使用动态分析
- 调查崩溃期间生成的核心转储。
- 添加断言,因此未断言的情况会按预期停止。
您需要调试源代码。为了分析它,您可以在源代码中放置断点来分析问题点。但是,只有当您将注意力集中在代码库中的特定问题区域时,它才会对您有所帮助。因此,您可以对代码中的各个模块执行测试,以找到有问题的区域。
看到您的程序在大约40分钟内失败,这似乎是内存泄漏的问题。当你使用VC时,VS提供了一个很好的机制来检测和隔离内存泄漏。
您的代码也可能有与分配数组然后访问不访问该数组的元素相关的错误。或者在某个地方,代码可能已经添加元素到数组中,而不是替换旧的条目,它不断添加新的条目。
- 提升 ASIO Async_receive崩溃程序
- 类指针方法崩溃程序
- get_body来自 IHTMLDocument2 崩溃程序
- 是否有可能存在不会崩溃程序的内存问题
- 调试运行时出现奇怪的崩溃程序(Eclipse C++)
- 儿童对话框 - setWindowTexta或sendmessagea崩溃程序-MFC
- 顶点阵列GLFW崩溃C 程序
- 将值分配给Float数据类型崩溃程序
- OpenCV-将变量添加到类成员崩溃程序
- boost::interprocess::managed_shared_memory 崩溃程序
- 将枚举值分配给整数崩溃程序
- SDL 1.2 -> SDL 2.0(崩溃程序)
- 空析构函数崩溃程序:C++
- 冒泡排序崩溃程序c++
- Ofstream关闭崩溃程序
- 删除字符* 崩溃程序
- c++矢量擦除崩溃程序
- Lua_getglobal崩溃程序
- 通过Copy Constructor创建的e2打印崩溃程序
- RNG崩溃c++程序