您将如何纠正无响应的应用程序?

时间:2011-07-11 09:55:18

标签: c++

刚才我接受了ca(Computer Associates)的C ++开放采访。

问:有一个应用程序连续运行了几天......有一天它变得没有响应/被绞死。你怎么调试/纠正应用程序。你的第一步是什么?

答:我首先回答...检查内存使用情况详细信息/ CPU使用情况。如果某些所需资源可用,则检查...或者如果它是网络绑定的,如果网络是实时的...等等..

问:他说......这些都是肤浅的东西......假设没有这样的问题......那么?

答:我告诉最好的方法是检查调试日志是否已启用..如果它们不是..给客户一个启用调试的应用程序并在现场测试它。 因为应用程序是间歇性挂起的......很难通过任何其他方式检测为什么它会没有响应。调试日志会告诉我应用程序什么时候开始生气,因为找到根本原因负责的具体操作需要知道,调试日志是我认为最好的选择。

面试官转向另一个问题说..好吧。

所以,我的回答是否足够好。还有一个优秀程序员可以遵循的其他方法吗?

2 个答案:

答案 0 :(得分:6)

使用WinDbg或创建(迷你)转储文件并在Visual Studio中加载它。为所有发布二进制文件加载调试符号,并查看其挂起的确切位置

这应该是一个不错的第一步

编辑当然,我(愚蠢地)假装窗户是没有明显原因的。在UNIX / linux上,使用straceptracegdb --remotepstackdtrace(如果它在那里)等更容易实现这一点

编辑一般来说,使用WMI性能计数器/ perfmon也是一种非常好的做法。这可能会有所启发(但我确信面试官正在寻找'我如何检查正在运行的应用程序'类型的答案;这略微倾向于你已经提到过的'依赖于日志记录'方法自己的回答)

答案 1 :(得分:2)

大多数时候,这些问题无法回答,因为它们非常主观。他们通常被要求评估&判断潜在候选人如何处理问题,并展示调试问题的一些建设性方法。只要答案显示解决问题的一些逻辑方法,答案就是好的。

你的答案很好。要添加它,最重要的是识别问题发生的用例/模式。如果问题可以轻易再现,则可以解决。所以我会尝试定义重现问题的步骤,然后继续执行解决它的步骤。