あなたは出荷しました、あなたはまれなセグメンテーションフォールトを受け取ります。ポインタをチェックするか、それを手放しますか?


9

出荷され、アサートがオフになっていると、コードでnullポインタ違反が発生したことを示すまれなクラッシュレポートが表示されます。開発環境では、問題はアサートによって検出されたはずです。

あなたが持っているのはクラッシュレポートだけなので、問題を再現することはほぼ不可能です。バックトレースを追跡しても、最初にクラッシュが発生した理由についての手がかりはありません。

オプション:-クラッシュを防ぐためにポインターチェックを追加します。これはクラッシュを防ぎますが、そもそもなぜそれが起こったのかさえわからないでしょう。-飛ばして、再現シナリオで再び起こることを願って

アプリケーションが誘導ミスルまたは自動ブレーキシステムを対象としていないとしましょう...

どちらを選びますか?


これはrethoricalでない限り、あなたがこれを解決したい場合、スタックオーバーフローのサイトに(おそらくPastebin.comに)対応するコードファイルと一緒にクラッシュレポートを投稿する便利かもしれません...
タマラWijsman

2
@TomWij:そう思わないでください..「おそらくローカライズされすぎている」としてクローズされるでしょう
Naveen

@Naveen:多分...私は定期的なSOの訪問者ではないので、これはSU-mindコメントでした。
Tamara Wijsman、2010

1
@Naveen:ローカライズされすぎるとは、地域が広すぎることを意味します。それは地理に関するものであり、問​​題の専門化に関するものではありません。しかし、この質問は主観的にSOで締めくくられるでしょう。
Maniero

回答:


7

2番目の方法を選択しました。クラッシュが発生した時点でNULLポインタが予期されていなかった場合、クラッシュを非表示にしても意味がありません。ほとんどの場合、このNULLポインターは、他の何かが間違っているという症状の1つにすぎません。NULLポインターを使用して非表示にした場合、何かが壊れることはほぼ確実です。シナリオがランダムな場所で毎回クラッシュする点を知っていれば、シナリオをキャッチする可能性が高くなると思います。


1
私自身もこの意見に傾いています。ユーザーの認識が私を心配しています。クラッシュは明らかに何かがおかしいように見えます。ただし、機能の計算が完全に間違っている場合は、これも通知されます。
MM01 2010

2
私の意見では、ユーザーが偶発的なクラッシュにイライラするかもしれませんが、気付かれないように間違った結果を提供すると、ユーザーは本当に動揺します。
Naveen

できるだけ早くクラッシュし、問題を見つけやすくなり、ユーザーが
失う

また、私はvalgrindを使用して私が間違っていることを見つけます(または、少なくとも、私は修正する必要がある問題を見つける可能性があります)追加のアサートを追加して、以前にNULLポインタをキャッチしようとします。しばらくの間アサートがオンになっているビルドを実行して、より早くクラッシュするかどうかを確認するようにユーザーに依頼する
Spudd86

3
  1. クラッシュはどのくらいの頻度で発生しますか?それは、いくつかのあいまいなケースで多くの顧客に1人だけのために起こりますか?結果は何ですか(データ損失、システムクラッシュ)?100万回に1回の頻度で発生し、アプリケーションを再起動するだけでデータが失われない場合は、おそらく修正する必要はありません。そのままにしておきます。

  2. アサートを追加してすべての顧客に出荷するのにどのくらいの費用(お金と時間)がかかりますか(顧客の一部だけが新しいバージョンを取得した場合、残りはチェックされていないnull問題に入る可能性があります)?問題を見つける可能性はどれくらいですか?エラーをキャッチすることを期待してコードにランダムチェックを入れるだけの場合、それは悪い習慣です...

  3. 問題はお客様のマシンで再現できますか?そのマシンにアクセスできますか?これは本当に価値があるかもしれません

  4. クラッシュレポートを確認し、提供された情報が有用であり、問​​題の診断に役立つことを確認してください


2

開発環境では、問題はアサートによって検出されたはずです。

特定の順序では、それは捕捉および修正されたはずですが、現在のバックトレースは捕捉されていません。
クラッシュダンプの問題点を確認できるはずです。パラメータを確認したことがありますか?

あなたがこれに入れたい時間の長さに基づいて行うことができる追加:

  • クラッシュダンプをアーカイブし、クラッシュした行にコメントを付けてコード参照し
    ます。これにより、非常によく似たクラッシュダンプを調べて、以前に発生したことを知ることができます...
    [費やした時間:短い]

  • 追加のチェック、ロギング、... これを防止して、次回に詳細情報を取得したい。
    [費やした時間:中]

    コードでnullポインター違反が発生しました。

  • この違反が発生するような方法でアプリケーションを呼び出すことが不可能であることを確認してください
    [過ごした時間:長い]


1
この投稿は、問題を解決するためのアプローチについてではなく、仮説的な状況(つまり、割り当てられた時間枠内で問題の原因を推定することができなかった)での行動方針についてです。
MM01 2010

2

最近では、assert()をオンにして出荷しています。それはそれほどコストがかからず、敵意のある状況での生活をはるかに簡単にすることができます(つまり、顧客の環境は、多くの場合、開発またはQA環境よりも敵意があります)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.