2011-07-11 7 views
1

ちょうど今、私はca(Computer Associates)からC++のインタビューを受けました。応答しないアプリケーションを修正するにはどのようにアプローチしますか?

Q:数日間連続して実行されるアプリケーションがあります。ある日、応答がなくなりハングアップします。アプリケーションをデバッグ/修正しますか?最初のステップは何ですか?

A:メモリの使用状況の詳細/ CPU使用率のチェックが必要です。必要なリソースの一部が使用可能かどうかをチェックしています。ネットワークに接続されているかどうかを確認してください。

Q:彼は言った。これらはすべて表面的なものです。そのような問題はありませんか?

A:デバッグログが有効になっているかどうかをチェックすることが最善の方法です。また、ユーザーがデバッグを有効にしたアプリケーションを使用してフィールドでテストすることはできません。 アプリケーションが断続的にぶら下がっています。何か他の方法で検出するのが非常に難しいため、応答が遅くなる可能性があります。また、デバッグログは、アプリケーションが瞬時に怒って、責任を知っておく必要があり、デバッグログは私が最善の策と考えるものです。

インタビュアーが別の質問に切り替えました。大丈夫です。

私の答えは十分でした。良いプログラマーが従うと思われる方法はありますか?

+1

「アプリケーションがあります」は非常に曖昧です。 –

+0

@Martinhoはい私はそれに同意します! – ashishsony

答えて

6

WinDbgを使用するか、(ミニ)ダンプファイルを作成し、Visual Studioでロードします。もちろん、負荷のすべてのリリースバイナリーのデバッグシンボルを、そしてそれは

ハングしている場所を正確にまともな最初のステップ

する必要があることを見る編集は、私は明らかな理由もなく窓を仮定して(愚か)でした。 UNIX/Linux上で、これは(それがあるかどう)また、WMIパフォーマンスカウンタを使用したなど

編集straceptracegdb --remotepstackdtraceを使用していても容易になるだろう/パフォーマンスモニタは、一般的には非常に良い習慣です。これはおそらくいくつかの光を出すでしょう(しかし、私はインタビュアーが「実行中のアプリケーションのタイプの答えを調べるにはどうすればよいか」と尋ねました;これは、

+1

デバッグシンボルがなくても、コードがスタックされているモジュールを見つけることができるので、これは少なくとも始まりです。可能であれば、複数のダンプを実行することを忘れないでください。プログラムがデッドロック状態にあるかどうか、または無限ループです。 –

2

ほとんどの場合、そのような質問は非常に主観的であるため、要点に答えることができません。彼らは通常、潜在的候補者がどのように問題に近づくかを判断し、問題をデバッグするいくつかの建設的なアプローチを示すことを評価するように尋ねられます。&答えが問題に取り組むための論理的方法論を示している限り、答えは良いです。

あなたの回答は良かったです。これを追加するには、問題が発生したユースケース/パターンを特定することが最も重要です。問題が容易に再現できる場合は解決できます。だから私は問題を再現するためのステップを定義し、それに取り組むためのステップを進めようとします。

関連する問題