(57)【特許請求の範囲】
【請求項１】
プロセッサと、データを格納するための少なくとも１つのメモリとを備えるコンピュータシステム内でトリアージダンプを生成する方法であって、前記メモリは、複数のメモリロケーションを備え、前記方法は、
前記複数のメモリロケーションに格納される第１の複数のデータ値を識別するステップであって、前記第１の複数のデータ値のそれぞれが個人情報の特性を有する、ステップと、
前記第１の複数のデータ値のそれぞれを、１つ以上の上書き値で上書きするステップと
を有し、前記複数のデータ値のうち第１のデータ値に対する上書き値は、該第１のデータ値に依存し、
前記第１のデータ値に対する前記上書き値は、前記第１のデータ値が第１の範囲内の値に属する場合には第１の上書き値であり、
前記第１のデータ値に対する前記上書き値は、前記第１のデータ値が第２の範囲内の値に属する場合には第２の上書き値である、方法。
【請求項２】
前記複数のメモリロケーションに格納される第２の複数のデータ値を識別するステップであって、前記第２の複数のデータ値のそれぞれが、ポインタの特性を有する、ステップと、
前記第２の複数のデータ値を変更せずに残すステップと
を有する、請求項１に記載の方法。
【請求項３】
前記ポインタの特性を有する前記第２の複数のデータ値のうちの第１のデータ値が、第１のメモリロケーションのアドレスに対応する値を有し、前記第１のメモリロケーションは、プログラムコード、ライブラリコード、またはコールスタックに関連づけられている、請求項２に記載の方法。
【請求項４】
請求項１〜３のうち何れか１項に記載の方法を前記コンピュータシステムの前記プロセッサに実行させるコンピュータプログラム。
【請求項５】
コンピューティングデバイスであって、
１つ以上のコンピュータプログラムを実行する少なくとも１つのプロセッサと、
前記１つ以上のコンピュータプログラムによって使用されるデータを格納するために複数のメモリロケーションを有する少なくとも１つのメモリと、
トリアージダンプを作成するトリアージ・ダンプ・エンジンと
を備え、前記トリアージ・ダンプ・エンジンは、
前記複数のメモリロケーションに格納される複数のデータ値を識別する識別エンジンであって、前記複数のデータ値のそれぞれが個人情報の特性を有する、識別エンジンと、
識別された複数のデータ値のそれぞれに対する上書き値を、複数の上書き値の候補の中から選択する選択エンジンと、
前記識別された複数のデータ値のそれぞれを、選択した上書き値で上書きする上書きエンジンと
を備え、前記選択エンジンは、前記複数のデータ値の第１のデータ値に対する上書き値を、前記第１のデータ値に基づいて選択し、
前記選択エンジンは、前記第１のデータ値が第１の範囲内の値に属する場合には、前記第１のデータ値に対して第１の上書き値を選択し、
前記選択エンジンは、前記第１のデータ値が第２の範囲内の値に属する場合には、前記第１のデータ値に対して第２の上書き値を選択する、コンピューティングデバイス。
【請求項６】
データ値の前記第１の範囲が負数を含む、請求項５に記載のコンピューティングデバイス。
【請求項７】
前記選択エンジンは、前記複数のデータ値の第２のデータ値に対する上書き値を、前記第２のデータ値に基づいて選択し、
前記選択エンジンは、前記第２のデータ値が値の前記第１の範囲内にある場合には前記第１の上書き値を選択し、
前記選択エンジンは、前記第２のデータ値が値の前記第２の範囲内にある場合には前記第２の上書き値を選択する、請求項５に記載のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
開示される実施の形態はトリアージダンプの生成方法及びコンピューティングデバイス等に関連する。
【背景技術】
【０００２】
現代のコンピュータソフトウェア開発者は、ソフトウェアがユーザにリリースされた後でさえも、継続的にソフトウェアを改善および更新している。インターネットなどの既存のネットワークインフラは、必要であれば、ソフトウェア開発者がユーザにソフトウェア更新情報を、すばやく頻繁に送信することを可能にする。インターネットはまた、ソフトウェアを実行している間に発生する可能性のある問題に関して、ユーザがソフトウェア開発者に、フィードバックを提供することを可能にする。このフィードバックは、ユーザの明確な動作により送信された、手動のフィードバックであろう。しかしながら、オペレーティングシステムの中には、ユーザがユーザのオペレーティングシステムに対して、そのような情報を送信することに同意を与えた場合、自動的にフィードバックを提供することを可能にする、エラー報告システムのエージェントを含むものがある。このフィードバックは、ソフトウェアプログラムがクラッシュもしくはハングした時点でのオペレーティング環境についての有益な情報を含む可能性があり、ソフトウェア開発者がそのソフトウェア内の何らかのバグを調べ、修正することを可能にする。
【０００３】
フィードバックがオペレーティングシステムによって自動的に送信された場合、送信された情報は、クラッシュまたは他の性能問題の時点でのコンピュータの動作状態を定義するためにコンピュータから収集された情報の「ダンプ」である可能性がある。ダンプ内のメモリの内容の少なくとも一部を含むことは有益である。この情報は、時に、メモリダンプと呼ばれ、特定の時点での作業メモリの状態を明らかにする。
【０００４】
メモリダンプは、ソフトウェア開発者が、クラッシュまたはハングの原因の調査を実行することを可能にする。しかしながら、現代コンピュータシステムにおける完全メモリダンプは、極めて大きく、そこに含まれる情報のすべてが、ソフトウェア開発者に特に有用であるわけではない。したがって、メモリダンプの一部のみを送信してもよい。
【０００５】
異なるメモリからの内容を、異なる状況で送信することができる。状況によっては、エラーのレポートは、メモリの内容に十分含まれ、特定のソフトウェアアプリケーションが抱える問題について識別する際の助けとすることができる。ソフトウェアは、何らかのさまざまな問題を抱えている可能性がある。例えば、性能、信頼性、安定性、セキュリティ、または整合性についての問題があるかもしれない。そのようなダンプは、時に、「トリアージダンプ(triage  dump)」と呼ばれる。トリアージダンプの解析に基づいて、ソフトウェア開発者は、エラー報告システムを構築して、エラーレポートに含めるためのより詳細な情報を収集することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
一観点による課題は、ユーザのプライバシーを保護しつつ、エラーを診断するのに有用な情報をシステムが取得できるようにすることである。
【課題を解決するための手段】
【０００７】
一観点による方法は、
プロセッサと、データを格納するための少なくとも１つのメモリとを備えるコンピュータシステム内でトリアージダンプを生成する方法であって、前記メモリは、複数のメモリ領域を備え、前記方法は、
前記複数のメモリ領域に格納される第１の複数のデータ値を識別するステップであって、前記第１の複数のデータ値のそれぞれが個人情報の特性を有する、ステップと、
前記第１の複数のデータ値のそれぞれを、ヌルポインタの値には対応していない１つ以上の上書き値で上書きするステップと
を有する方法である。
【図面の簡単な説明】
【０００８】
【図１】トリアージダンプをソフトウェア開発者に送信することができる、例示的ネットワーク環境の簡易ブロック図である。
【０００９】
【図２】本発明の実施形態を作動することができる、例示的コンピューティング環境のブロック図である。
【００１０】
【図３】図２のオペレーティングシステムの簡易ブロック図である。
【００１１】
【図４】本発明の実施形態を実施することができるコンピュータシステムの例示的メモリの略図である。
【００１２】
【図５Ａ】図４の例示的メモリをテーブルで示す。
【００１３】
【図５Ｂ】本発明の一実施形態に従って、個人情報を格納した可能性のあるデータ値を書き換えた後の、図４の例示的メモリである。
【００１４】
【図５Ｃ】本発明の一実施形態に従って、個人情報を格納した可能性のあるデータ値を書き換えた後の、図４の例示的メモリである。
【００１５】
【図６】トリアージダンプを生成するための一実施形態の模式的フローダイアグラムである。
【００１６】
【図７】乱数発生器を使用して、トリアージダンプを生成するための一実施形態の模式的フローダイアグラムである。
【発明を実施するための形態】
【００１７】
＜実施の形態の概要＞
【００１８】
エラー報告システムの一部として、ユーザのコンピュータからメモリ・ダンプ・データを送信するための技術を本明細書で説明する。メモリダンプは、動作エラーの原因を識別する際に有用な情報を含むことができ、一方、ユーザ固有の個人データがメモリ・ダンプ・データに含まれるリスクを低減することができる。ユーザ固有の個人データがメモリダンプに含まれるリスクを低減するために、データ値を上書き値で上書きすることによって、個人データのデータ特性を有するメモリの部分を「書き換える」。
【００１９】
上書き値は、エラーの原因を識別する際に、メモリ・ダンプ・データの値を増やすために選択することができる。いくつかの実施形態において、上書きされたメモリ領域と、上書きされずに情報が保持されたメモリ領域とを区別することを可能にするよう、上書き値を選択することができる。いくつかの実施形態において、ポインタの特性を有するデータ値が、上書きされることなく、メモリダンプ内に保持され、潜在的ポインタ値と異なるよう、上書き値が選択される。具体例として、値が上書きされた領域と、ヌルポインタを格納する領域との区別を可能にするよう上書き値を選択することができる。
【００２０】
いくつかの実施形態において、上書き値は、上書きするデータ値の所定の関数として選択することができる。いくつかの実施形態において、上書き値は、ランダムに選択することができる。
【００２１】
いくつかの実施形態において、コンピュータシステムは、トリアージ・ダンプ・エンジンを使用して、コンピュータプログラムのクラッシュまたはハングに応じて、トリアージダンプを生成する。トリアージ・ダンプ・エンジンの識別エンジンは、個人情報の特性を有する複数のデータ値を識別する。上書きエンジンは、各識別されたデータ値を、上書き値で上書きする。上書き値は、ヌルポインタ値としてコンピュータシステムによって使用された値に対応しない可能性がある。生成されると、トリアージダンプは、外部サーバに送信され得る。
【００２２】
いくつかの実施形態において、上書き値は、上書きされるデータ値に応じて決定することができる。例えば、上書きされるデータ値が、第１の所定の範囲内にある場合、上書きエンジンは、第１の上書き値でデータ値を上書きすることができる。一方、上書きされるデータ値が、第２の所定の範囲内にある場合、上書きエンジンは、第２の上書き値でデータ値を上書きすることができる。
【００２３】
いくつかの実施形態において、選択エンジンは、上書き値を判断する。選択エンジンは、乱数発生器を使用して、さまざまな上書き値を選択することができる。上書きされたデータ値および対応する上書き値は、データ値をどのように書き換えるかのマッピングを追跡するテーブルに格納することができる。上書き値を含むテーブルの部分は、外部サーバに送信され、ユーザのプライバシーを危険にさらすことなく、トリアージダンプを解析するために使用される追加情報を提供することができる。
【００２４】
いくつかの実施形態において、サーバは、遠隔コンピュータからトリアージダンプを受信する。トリアージダンプは、プログラムのクラッシュおよびハングの原因を解析するのに有益である、ポインタデータを備える。トリアージダンプはまた、個人データの伝搬を防ぐため、上書き値で上書きされた潜在的個人情報を表す、書き換えられたデータ値を備える可能性がある。トリアージダンプはまた、データ値がヌルポインタ値を使用して決して書き換えられないので、書き換えられたデータから区別することができる、ヌル・ポインタ・データを備える可能性がある。
【００２５】
いくつかの実施形態において、サーバは、トリアージダンプのデータを書き換えるために使用される上書き値を備える値のリストを受信する。各上書き値は、問題が発生したプログラムのコールスタックを通じて、追跡することができる。これは、ソフトウェア開発者に実際のデータ値を明らかにすることなく、ソフトウェア開発者が、データ値を最初に使用したプログラム内の関数を識別することを可能にすることができる。データ値が個人情報に特性を有した場合、これにより、ユーザのプライバシーを保護する。
【００２６】
トリアージダンプを生成、送信、および受信するためのいくつかの方法を、コンピュータ読取り可能記憶デバイスで格納された命令を実行するコンピューティングシステムのプロセッサによって実行することができる。
【００２７】
以上が、添付の特許請求の範囲によって定義される非限定的な本発明の概要である。
【００２８】
添付図面は縮尺通りに描かれることを意図していない。図面において、さまざまな図に示される各同一またはほぼ同一の構成要素は、同様の数字によって表される。見やすくするために、すべての図面におけるすべての構成要素にラベルづけしない可能性がある。
＜実施の形態の詳細な説明＞
【００２９】
発明者は、エラー報告システムの一部としてメモリダンプを収集するための改良技術が、ユーザのプライバシーおよび個人情報に対するリスクを高めること無く、エラーを診断するための有用な追加情報を提供することができることを認識および理解している。プライバシーを保護するために、エラー報告システムにより送信されたメモリダンプのあるデータ値は、そのデータ値が個人情報の特性を有するものである場合、書き換えることが必要となるであろう。「書き換え」には、上書き値でデータ値を上書きすることを含むことができる。パスワードもしくはクレジットカード情報などの個人データを書き換えることは、個人情報が解析に関係することが滅多に無いため、メモリ・ダンプ・データを解析するためのソフトウェア開発者の能力に影響することは無いであろう。従来のエラー報告システムは、特に、トリアージダンプを形成するよう構成された場合、個人情報を特定する任意の値を書き換えることができる。
【００３０】
しかしながら、発明者はさらに、保持された他の情報を不明瞭にしない値でメモリダンプを書き換えることが有益であると認識している。それに応じて、上書き値は、保持されたどんな値とも異なるよう選択することができる。具体例として、上書き値は、ヌルポインタ値と書き換えられたデータ値とを区別するよう選択することができる。したがって、いくつかの実施形態において、ヌルポインタ値は、データ値を書き換えるための上書き値として使用されない。しかし、他の実施形態において、上書き値は、ポインタの有効値または値が格納された他のタイプのデータであるか、またはそうである可能性のある任意の値とは異なるよう選択することができる。
【００３１】
発明者はさらに、それらの値がメモリダンプから回復できない場合でさえ、上書きされた値についての情報を保持するように、メモリダンプを書き換えることが有益であると認識している。それに応じて、上書き値は、上書きされた値を部分的に基にして選択することができる。しかしながら、上書きされた値が、上書き値から回復できないような方法を選択することもできる。いくつかの実施形態において、上書きされた値は、上書きされた値と上書き値との間の多対１の関係のため、回復することができない可能性がある。例えば、上書き値が、値の各範囲と関連づけられ、同じ値が、各範囲における任意の値を上書きするために使用された場合、そのような状況が発生する可能性がある。具体例として、異なる上書き値を使用して、大きな負の値、大きな正の値、および他の値を識別することができる。そのような上書き値割り当てスキームは、例えば、オーバーランを示すか、または実行エラーにある値を識別するため、クラッシュダンプの全解析をすることができる。
【００３２】
いくつかの実施形態において、上書きされた値は、上書きされた値と上書き値との間のランダムな関係のため、回復することができない可能性がある。そのような状況は、値と上書き値との間のランダムマッピングが作成された場合に発生する可能性がある。そのようなマッピングは、メモリダンプ内の同じ値の複数のインスタンスを識別する際に有益である可能性があり、例えば、その変数の値を明らかにすることなく、コールスタックでの関数を通過した特定の変数を追跡するために使用することができる。
【００３３】
上書き値が動的に判断された状況では、選択された１つまたは複数の上書き値は、エラーレポートの一部として、またはそれと共に通信され、エラーレポートの解析を容易にすることができる。例えば、ランダムマップ内の、ランダムに選択された値のセットは、それらが上書きする関連値無しに、通信することができる。
【００３４】
図１は、トリアージダンプを、ソフトウェアユーザ１１５からソフトウェア開発者１３５に送信することができる、例示的ネットワーク環境１００を示す。ソフトウェアユーザ１１５と関連したコンピュータシステム１１０は、クラッシュまたはハングしたプログラムを実行する可能性がある。プログラムは、任意のタイプのコンピュータプログラムとすることができる。例えば、アプリケーションプログラム、またはオペレーティング・システム・プログラムとすることができる。場合によっては、オペレーティングシステムのカーネルと関連づけられたプログラムとしてもよい。しかし、エラー情報が収集される特定の構成要素は本発明にとって重要ではない。
【００３５】
情報が収集されるエラーのタイプは、本発明に重要ではない。例えば、クラッシュは、プログラムが予期せず終了することを意味する。プログラム内のエラーが、カーネルの重要なコンポーネントを中断した場合、プログラムのクラッシュにより、コンピュータシステム１１０全体がクラッシュする可能性がある。他方で、ハングは、プログラムが動作し続ける場合でも、ユーザ入力に応答せず、フリーズを引き起こす。「ハング」および「フリーズ」という用語は、時に、区別無く使用される。エラー情報は、クラッシュ、ハング、または他の任意の適切なタイプのエラーに対して収集することができる。これらのエラーは、当分野で既知であるような技術を使用することを含む、任意の適切な方法で検出することができる。いくつかの実施形態において、情報の収集を引き起こすエラーは、任意の予期しない、または意図しない結果となる可能性がある。例えば、プログラムが性能の問題に直面し、適切な応答が無い場合に、エラーが発生する可能性がある。
【００３６】
プログラムのクラッシュおよびハングは、さまざまな理由に対し発生する可能性がある。例えば、開発者が説明できない不適切なデータ値が、クラッシュまたはハングをもたらす可能性がある。例えば、ヌルポインタを渡すことが、クラッシュの原因になる可能性がある。ラップ・アラウンド・エラー、すなわち、値が、その変数型に対して許可された最大値を超え、マイナス値として解釈される場合、クラッシュまたはハングの原因となる可能性がある。本発明の実施形態は、クラッシュまたはハングに対する何らかの特定の理由に限定されない。
【００３７】
プログラムがクラッシュまたはハングした場合、コンピュータシステム１１０は、トリアージダンプ１４０の生成を開始することができる。トリアージダンプ１４０は、ソフトウェア開発者１３５によって、クラッシュまたはハングの原因を解析するために使用することが可能である、コンピュータシステム１１０のメモリの小さな部分のダンプである。ダンプされたメモリの特定の部分は、コールスタックを保持するために使用されるメモリを含む可能性がある。トリアージダンプ１４０は、例えば、５０ＫＢよりサイズを小さくすることができる。いくつかの実施形態において、トリアージダンプ１４０は、１０から２０ＫＢとすることができる。トリアージダンプに含まれるメモリの特定の部分は、当分野で既知であるような技術を使用することを含む任意の適切な方法で選択することができ、任意の適切なサイズにすることができる。
【００３８】
トリアージダンプのサイズを小さくすることで、トリアージダンプ１４０を、ネットワーク１２０上で迅速および容易に送信することができる。コンピュータネットワーク１２０は、任意のタイプのネットワークとすることができる。いくつかの実施形態において、ネットワーク１２０は、インターネットである。
【００３９】
トリアージダンプは、任意の適切な場所で受信することができ、この例では、ネットワーク１２０に接続されたサーバ１５０である。サーバ１５０は、複数のユーザからトリアージダンプを受信するよう構成することができる。この情報は、コンピュータ１１０ならびにエラーを同様に報告する他の同様なコンピュータで実行することができるコンポーネントで、１つまたは複数の起こり得る問題を識別するよう集約ならびに処理することができる。エラーが特定のソフトウェアのコンポーネントと関連する場合、エラー情報を、そのコンポーネントの開発者に提供することができる。
【００４０】
それに応じて、ソフトウェア開発者１３５は、サーバ１５０から、エラーの指摘を受信することができる。ソフトウェア開発者１３５は、コンピュータ１３０を使用して、サーバ１５０に格納されたデータにアクセスし、エラーのソースを調べることができる。例えば、ソフトウェア開発者１３５は、ソフトウェアの１人または複数のユーザ１１５によって送信された１つまたは複数のトリアージダンプ１４０を解析し、トリアージダンプ１４０の生成を引き起こしたクラッシュまたはハングの原因を識別することができる。
【００４１】
いくつかの実施形態において、ソフトウェア開発者１３５は、さらなる情報およびより詳細な解析を必要とするソフトウェアでの問題があると判断することができる。ソフトウェア開発者１３５は、同様のクラッシュまたはハングが発生した場合、コンピュータ１１０がユーザ１１５に、より詳細なメモリダンプをソフトウェア開発者１３５に送信するための許可を求める可能性があると、ユーザのコンピュータ１１０に通知することができる。例えば、ユーザ１１５は、個人情報を含む可能性がある、より大きなメモリダンプを送信するための許可を求められる可能性がある。ユーザが拒否した場合、より大きなメモリダンプは、送信されない。本発明の実施形態は、トリアージダンプ１４０またはより大きなメモリダンプの任意の特定の実装態様に限定されない。
【００４２】
図２は、本発明を実現することができる適切なコンピューティングシステム環境２００の例を示す。例えば、コンピューティング環境２００は、ユーザのコンピュータ１１０、ソフトウェア開発者のコンピュータ１３０、またはエラー報告システムのサーバ１５０とすることができるコンピュータ２１０を含む。
【００４３】
コンピューティングシステム環境２００は、適切なコンピューティング環境の一例に過ぎず、本発明の使用または機能の範囲に何らかの限定を提案することを意図しない。コンピューティング環境２００は、例示的オペレーティング環境２００で示したコンポーネントの任意の１つまたは組合せに関する何らかの依存関係または要件を有すると解釈されるべきではない。
【００４４】
本発明は、他の多数の汎用もしくは専用コンピューティングシステム環境もしくは構成で動作する。本発明と共に使用するのに適切である可能性のある周知のコンピューティングシステム環境および／または構成の例には、これらに限定されないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドもしくはラップトップデバイス、タブレット、携帯電話、マルチプロセッサシステム、マイクロプロセッサ型システム、セット・トップ・ボックス、プログラマブル民生用電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、および上記システムもしくはデバイスのいずれかを含む分散コンピューティング環境などある。
【００４５】
コンピューティング環境は、プログラムモジュールなどの、コンピュータ実行可能命令を実行することができる。一般に、プログラムモジュールは、特定のタスクを実行するか、または特定の抽出データ型を実施する、ルーチン、プログラム、オブジェクト、コンポーネント、およびデータ構造など含む。本発明はまた、通信ネットワークを通じてリンクされた遠隔処理デバイスによってタスクが実行される、分散コンピューティング環境で実施することができる。分散コンピューティング環境では、プログラムモジュールは、メモリ記憶デバイスを含むローカルおよび遠隔コンピュータ記憶媒体に設置することができる。
【００４６】
図２を参照すると、本発明を実現するための例示的システムは、コンピュータ２１０の形で汎用コンピューティングデバイスを含む。コンピュータ２１０の構成部品は、これらに限定されないが、処理ユニット２２０、システムメモリ２３０、およびシステムメモリを含むさまざまなシステム構成部品を処理ユニット２２０に結合するシステムバス２２１を含むことができる。システムバス２２１は、メモリバスもしくはメモリコントローラ、周辺バス、および任意のさまざまなバスアーキテクチャを使用するローカルバスを含む、任意のいくつかのタイプのバス構造体とすることができる。例えば、限定するものではないが、そのようなアーキテクチャには、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロ・チャネル・アーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオエレクトロニクス標準化協会（ＶＥＳＡ）ローカルバス、およびメザニンバスとしても知られる周辺構成機器相互接続（ＰＣＩ）バスがある。例示的システムはまた、システム・オン・チップ（ＳｏＣ）を使用して実現してもよい。
【００４７】
典型的に、コンピュータ２１０は、さまざまなコンピュータ読取り可能媒体を備える。コンピュータ読取り可能媒体は、コンピュータ２１０によりアクセスすることができ、揮発性ならびに不揮発性媒体、リムーバブルならびに非リムーバブル媒体を含む、任意の利用可能媒体とすることができる。例えば、限定するものではないが、コンピュータ読取り可能媒体は、コンピュータ記憶媒体および通信媒体を備えることができる。コンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、もしくは他のデータなどの情報の記憶のための任意の方法もしくは技術で実現される、揮発性ならびに不揮発性、リムーバブルならびに非リムーバブル媒体を含む。コンピュータ記憶媒体は、これらに限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、もしくは他のメモリ技術、ＣＤ−ＲＯＭ、ディジタル多用途ディスク（ＤＶＤ）、もしくは他の光学ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、もしくは他の磁気記憶デバイス、または、所望の情報を格納するために使用することができ、コンピュータ２１０によりアクセスすることが可能な任意の他の媒体を含む。通信媒体は、典型的に、コンピュータ読取り可能命令、データ構造、プログラムモジュール、または搬送波、データ信号、もしくは他の搬送機構などの、変調データ信号における他のデータを実施し、任意の情報送達媒体を含む。「変調データ信号」という用語は、信号内の情報を符号化するように設定または変更された１つまたは複数の特性を有する信号を意味する。例えば、限定するものではないが、通信媒体は、有線ネットワークもしくは直接有線接続などの有線媒体、および音響、ＲＦ、赤外線、ならびに他の無線媒体などの無線媒体を含む。上記のいずれの組合せもまた、コンピュータ読取り可能媒体の範囲内に含まれるべきである。
【００４８】
システムメモリ２３０は、リード・オンリー・メモリ（ＲＯＭ）２３１およびランダム・アクセス・メモリ（ＲＡＭ）２３２などの揮発性および／または不揮発性メモリの形式のコンピュータ記憶媒体を含む。トリアージダンプ１４０は、ＲＯＭ２３１もしくはＲＡＭ２３２のいずれか、または両方に格納されたデータを備えることができる。スタートアップ中などの、コンピュータ２１０内の要素の間での情報のやりとりを助ける基本ルーチンを含む、基本入出力システム２３３（ＢＩＯＳ）は、典型的に、ＲＯＭ２３１に格納される。典型的に、ＲＡＭ２３２は、処理ユニット２２０にすぐにアクセス可能であり、および／または処理ユニット２２０によって現在実行されている、データおよび／またはプログラムモジュールを備える。例えば、限定するものではないが、図２は、オペレーティングシステム２３４、アプリケーションプログラム２３５、他のプログラムモジュール２３６、およびプログラムデータ２３７を示し、それらのいずれも、クラッシュもしくはハングし、コンピュータ２１０がトリアージダンプを生成するという結果を招く可能性がある。オペレーティングシステム（ＯＳ）２３４のさらなる態様は、図３と関連して説明する。
【００４９】
コンピュータ２１０はまた、他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータ記憶媒体を含む可能性がある。例に過ぎないが、図２は、非リムーバブル、不揮発性磁気媒体に読み書きするハード・ディスク・ドライブ２４１、リムーバブル、不揮発性磁気ディスク２５２に読み書きする磁気ディスクドライブ２５１、およびＣＤ−ＲＯＭもしくは他の光学媒体などのリムーバブル、非不揮発性光学ディスク２５６に読み書きする光学ディスクドライブ２５５を示す。例示的オペレーティング環境で使用することができる他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータ記憶媒体は、これらに限定されないが、磁気テープカセット、フラッシュ・メモリ・カード、ディジタル多用途ディスク、ディジタル・ビデオ・テープ、ソリッドステートＲＡＭ、およびソリッドステートＲＯＭなどを含む。ハード・ディスク・ドライブ２４１は、典型的に、インターフェース２４０などの非リムーバブル(取り外し可能でない)メモリ・インターフェースを通じてシステムバス２２１に接続され、磁気ディスクドライブ２５１および光学ディスクドライブ２５５は、典型的に、インターフェース２５０などのリムーバブル(取り外し可能な)メモリ・インターフェースによってシステムバス２２１に接続される。
【００５０】
上記した、図２に示したドライブおよびそれらに関連するコンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、およびコンピュータ２１０に対する他のデータを記憶することを提供する。図２では、例えば、ハード・ディスク・ドライブ２４１は、オペレーティングシステム２４４、アプリケーションプログラム２４５、他のプログラムモジュール２４６、およびプログラムデータ２４７を格納するものとして示される。これらのコンポーネントは、オペレーティングシステム２３４、アプリケーションプログラム２３５、他のプログラムモジュール２３６、およびプログラムデータ２３７と同じか、または異なるものとすることができることに留意されたい。オペレーティングシステム２４４、アプリケーションプログラム２４５、他のプログラムモジュール２４６、およびプログラムデータ２４７は、少なくとも、それらが異なるコピーであることを示すために、本明細書では異なる番号を付与する。ユーザは、コマンドおよび情報を、コンピュータ２１０に、キーボード２６２および、一般に、マウス、トラックボール、もしくはタッチパッドと称されるポインティングデバイス２６１などの入力デバイスを通じて入力することができる。他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、パラボラアンテナ、またはスキャナなどを含むことができる。これらおよび他の入力デバイスは、しばしば、処理ユニット２２０に、システムバスに結合されたユーザ入力インターフェース２６０を通じて接続されるが、パラレルポート、ゲームポート、もしくはユニバーサル・シリアル・バス（ＵＳＢ）などの他のインターフェースもしくはバス構造によって接続することができる。モニタ２９１または他のタイプの表示デバイスはまた、システムバス２２１に、ビデオインターフェース２９０などのインターフェースを介して接続される。モニタの他に、コンピュータはまた、出力周辺インターフェース(ペリフェラル出力インタフェース)２９５を通じて接続することができる、スピーカ２９７およびプリンタ２９６などの他の周辺出力デバイスを備えることができる。
【００５１】
コンピュータ２１０は、遠隔コンピュータ２８０などの１つまたは複数の遠隔コンピュータへの論理接続を使用して、ネットワーク環境で動作することができる。遠隔コンピュータ２８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、もしくは他の共通ネットワークノードとすることができ、典型的に、コンピュータ２１０に関連して上記した要素の多くまたはすべてを含むが、メモリ記憶デバイス２８１だけは、図２に図示した。図２に示した論理接続は、構内ネットワーク又はローカルエリアネットワーク（ＬＡＮ）２７１および広域ネットワーク又はワイドエリアネットワーク（ＷＡＮ）２７３を含むが、他のネットワークを含んでもよい。そのようなネットワーキング環境は、オフィス、企業規模コンピュータネットワーク、イントラネット、およびインターネットにおいて一般的である。図１に示したように、遠隔コンピュータ２８０は、ソフトウェア開発者のコンピュータ１３０またはサーバ１５０とすることができる。
【００５２】
ＬＡＮネットワーキング環境で使用する場合、コンピュータ２１０は、ＬＡＮ２７１に、ネットワークインターフェースまたはアダプタ２７０を通じて接続される。ＷＡＮネットワーキング環境で使用する場合、コンピュータ２１０は、典型的に、モデム２７２、または他の手段を備え、インターネットなどのＷＡＮ２７３上で通信を確立する。モデム２７２は、内蔵もしくは外付けとすることができ、システムバス２２１に、ユーザ入力インターフェース２６０または他の適切な機構を介して接続することができる。ネットワーク化環境において、コンピュータ２１０に関連して示したプログラムモジュールまたはその一部は、遠隔メモリ記憶デバイスに格納することができる。例えば、限定するものではないが、図２は、メモリデバイス２８１上にあるような、遠隔アプリケーションプログラム２８５を示す。示したネットワーク接続は例示であり、コンピュータ間で通信リンクを確立する他の手段を使用することができることが理解されよう。
【００５３】
図３は、エラー報告システムのいくつかの実施形態で使用することができる、オペレーティングシステム（ＯＳ）２３４のいくつかのコンポーネントを示す。例えば、オペレーティングシステム（ＯＳ）２３４は、アプリケーションプログラム２３５などのソフトウェアがＲＡＭ２３２と相互通信して使用する方法を制御することができる、メモリマネージャ３９０を有することができる。メモリマネージャ３９０は、ＲＡＭ２３２のどの部分を、所与のアプリケーションプログラム２３５に割り当てるかを制御することができる。ＯＳ２３４はまた、トリアージ・ダンプ・エンジン３１０を有し、トリアージダンプを生成することができる。いくつかの実施形態において、トリアージ・ダンプ・エンジン３１０は、メモリマネージャ３９０の一部としてもよい。
【００５４】
いくつかの実施形態において、トリアージ・ダンプ・エンジン３１０は、処理ユニット２２０で実行する１つまたは複数のソフトウェアプログラムの実行中に直面した問題に基づき、トリアージダンプの生成を開始する。本発明の実施形態は、任意の特定のタイプの問題に限定されない。例えば、プログラムでの問題は、プログラムのクラッシュによるものである可能性があり、プログラムは、不意に実行を終了する。いくつかの実施形態において、問題は、プログラムのハングである可能性があり、プログラムは、実行を続けるが、ユーザ１１５からのコマンドに応じて停止する。いくつかの実施形態では、クラッシュまたはハングより深刻さの少ない問題に基づきトリアージダンプの生成を開始する可能性がある。例えば、ＯＳ２３４のコンポーネント、アプリケーションプログラム２３５、または他のプログラムモジュール２３６などの、コンピュータ２１０で実行するプログラムは、トリアージ・ダンプ・エンジン３１０に指示して、任意の事前にプログラムした条件に基づいて、ダンプを開始することができる。
【００５５】
トリアージ・ダンプ・エンジン３１０は、個人情報の特性を有する、したがって、書き換えるべき、システムのメモリ内のデータ値を識別する識別エンジン３２０を備えることができる。データ値が個人情報であるのか、それともプライバシーに対する懸念の無いデータなのかを確認することは困難である可能性がある。これは、いくつかの実施形態において、メモリダンプの処理が実行されることが皆無かそれに近いためである。ユーザのコンピュータ１１０でメモリダンプを解析することは、かなりのリソースを必要とし、パフォーマンスの低下をもたらす可能性がある。したがって、処理および解析は、ソフトウェア開発者のコンピュータ１３０にオフロードされる。しかしながら、メモリ・ダンプ・データの処理をオフロードすることは、ユーザのコンピュータ１１０が、本質的に、非常に少ないコンテキストで数字の文字列を見るという結果になる。この数字の文字列から、識別エンジン３２０は、特定のデータ値が個人データであるということを確実に確かめることができない可能性がある。しかしながら、識別エンジン３２０は、特定のデータ値が、個人データの特性を有することを判断することができる可能性がある。任意の適切な基準を使用して、個人情報の特性を定義することができる。いくつかの実施形態において、個人情報は、他の識別可能な型ではないような値以外である値によって特徴づけられてもよい。例えば、いくつかの実施形態において、ポインタのような値は、ポインタが有効に指し示すことができるメモリアドレスの範囲内にそれらの値が入っているかどうかに基づいて識別することができる。他の値は、個人情報を特徴づけるものとして扱うことができる。しかしながら、個人情報の特性を有するデータ値を識別するいくつかの実施形態は、コンピュータ１１０の例示的メモリ４００を図示する図４と関連して説明する。
【００５６】
いくつかの実施形態において、メモリ４００は、複数のメモリ領域を備え、それぞれが、アドレス４５０およびデータ値４４０と関連づけられる。本願において、メモリ領域はメモリロケーション等と言及されてもよい。メモリ領域の一部のみを図４に示し、メモリの実装態様は、図を簡単にするために簡易化した。例えば、各メモリ領域は、０００から９９９の範囲でアドレスと関連づけられる。当業者は、実際のメモリ４００内には非常に多くのメモリ領域が存在する可能性があり、さらに、メモリ領域が任意の適切な方法でアドレス指定される可能性があることを認識するであろう。例えば、メモリ領域は、３２ビットまたは６４ビットアドレスであるアドレスを有する可能性がある。当業者はまた、メモリ４００は、ＯＳ２３４のメモリマネージャ３９０によって実現される仮想メモリである可能性があることを認識するであろう。
【００５７】
例示目的のため、図４は、０００から９９９の範囲の１０進整数として各メモリ領域内に保持されるデータ値４４０を示す。しかしながら、本発明の実施形態は、そのことに限定されず、データ値４４０は、任意の適切な方法で、任意の適切な範囲の値を有して実現することができる。例えば、データ値４４０は、３２ビットまたは６４ビットアドレスとしてもよい。いくつかの実施形態において、データ値４４０のサイズは、時に、「ワードサイズ」と称され、メモリ領域アドレス４５０のサイズと同じである。
【００５８】
話を簡単にするために、すべてのメモリ領域に対するデータ値４４０のすべては示さない。しかしながら、データ値４４０の一部は、アドレス５００から５０７を有するメモリ領域に示す。例えば、アドレス５０２のメモリ領域は、データ値２０３を保持する。
【００５９】
ダンプしたメモリ４００のメモリ領域は、トリアージダンプのサイズを減らすために、サイズを制限することができる。ダンプされるメモリ領域の制限は、任意の方法で実現することができ、本発明の実施形態は、何らかの特定の技術に限定されない。例えば、いくつかの実施形態において、クラッシュまたはハングしたプログラムと関連づけられたメモリのみがダンプされる。いくつかの実施形態において、トリアージダンプは、プログラムのコールスタック４３０を保持するメモリ４００の一部に、またはトリアージダンプの生成を開始する結果となる問題に直面したプログラムに対するデータを保持するコールスタックの一部のみに制限することができる。しかし、ダンプされたメモリの量および選択される方法は、本発明では重要ではなく、当分野で既知の技術を使用してまたは任意の他の適切な方法で判断することができる。
【００６０】
トリアージダンプを生成するためにダンプされるメモリの量にかかわらず、個人情報として特徴づけられた値は、識別エンジン３２０によって識別することができる。いくつかの実施形態において、識別エンジン３２０は、ポインタの特性を有するデータ値４４０を識別することができる。ポインタであるデータ値は、トリアージダンプを解析する処理において有益である。したがって、ポインタの特性を有するデータ値４４０は、トリアージ・ダンプ・エンジン３１０によって書き換えられるべきではない。前述のように、ユーザのコンピュータ１１０は、メモリダンプの完全な解析を実行せず、非常に少ないコンテキストで数字の文字列としてダンプを見るだけである。したがって、識別エンジン３２０は、特定のデータ値がポインタであると確信して識別することができないが、特定のデータ値がポインタの特性を有すると判断することができる。
【００６１】
データ値がポインタの特性を有すると判断することは、任意の適切な方法で行うことができる。例えば、データ値は、ポインタであるかのように扱うことができ、データ値が示すメモリ領域を調べることができる。例えば、データ値が、プログラムコード４１０、ライブラリコード４２０、またはコールスタック４３０と関連したメモリ領域を示す場合、データ値は維持され、上書きされない可能性がある。いくつかの実施形態において、データ値が、プログラムコード、ライブラリコード、またはコールスタックと関連したメモリ領域を示す場合、データ値は維持され、上書きされない可能性がある。いくつかの実施形態において、代替のまたは追加の関連データは、カーネル・モード・オブジェクトまたはヒープデータへのハンドルなどの、他のタイプのポインタを備えることができる。この技術を使用して保持されたデータ値のすべてが必ずしもポインタである必要はないが、メモリ領域がポインタを保持するかどうかは、許容可能な確実性のレベルで判断することができる。しかし、他の実施形態において、場合によると、ダンプデータのより完全な解析を実行するために、トリアージダンプで保持される値を判断するため、逆に、上書きされる値を判断するため、他の技術が使用される可能性があることを認識すべきである。
【００６２】
いくつかの実施形態において、個人情報ではないことが明らかな変数は、書き換えずに残すことができる。例えば、グローバル変数および／または動的に生成されたモジュールは、トリアージダンプを解析する際に有益である可能性があるが、個人データを含むことはないであろう。
【００６３】
一例として、図４は、アドレス５０１のメモリ領域におけるデータ値が“００３”であることを示す。この値がポインタである場合、アドレス００３のメモリ領域を指し示す。アドレス００３のメモリ領域は、プログラムコード４１０と関連づけられる。したがって、認識エンジンは、アドレス５０１のメモリ領域を、ポインタの特性を有するものとして識別することができる。
【００６４】
アドレス５０２のメモリ領域におけるデータ値は“２０３”である。この値がポインタである場合、アドレス２０３のメモリ領域を指し示す。アドレス２０３のメモリ領域は、ライブラリコード４２０と関連づけられる。したがって、識別エンジンは、アドレス５０２のメモリ領域を、ポインタの特性を有するものとして識別するであろう。
【００６５】
アドレス５０４のメモリ領域におけるデータ値は“５０２”である。この値がポインタである場合、アドレス５０２のメモリ領域を指し示す。アドレス５０２のメモリ領域は、コールスタック４３０と関連づけられる。したがって、識別エンジンは、アドレス５０２のメモリ領域を、ポインタの特性を有するものとして識別するであろう。
【００６６】
他方で、アドレス５０５のメモリ領域におけるデータ値は“１５６”である。この値がポインタである場合、アドレス１５６のメモリ領域を指し示す。アドレス１５６のメモリ領域は、ソフトウェア開発者１３５に関心のあるメモリ領域と関連しない。したがって、識別エンジンは、アドレス５０２のメモリ領域を、ポインタの特性を有するものとして識別しないであろう。
【００６７】
いくつかの実施形態において、ポインタの特性を有さないメモリ領域は、個人情報の特性を有するメモリ領域として解釈される可能性がある。したがって、認識エンジンは、アドレス５０５のメモリ領域を、個人情報として識別する可能性があり、書き換える可能性がある。
【００６８】
いくつかの実施形態において、トリアージ・ダンプ・エンジン３１０は、識別エンジン３２０によって個人情報の特性を有すると判断されたデータ値を書き換えるための上書き値を選択するための選択エンジン３３０を備える。選択エンジンは、任意の適切な方法で、上書き値を選択することができる。いくつかの実施形態において、単一の上書き値を、すべてのデータ値に対して使用することができる。例えば、図４の簡易化されたメモリ４００において、個人情報の特性を有すると識別されたデータ値のそれぞれは、上書き値９９９で上書きすることができる。そのような上書き値は、この具体例において、ポインタに対する値、またはヌルポインタの値に対応しないため、選択することができる。
【００６９】
図５Ａは、テーブル５００として、図４のアドレス５０１から５０７のメモリ領域と関連づけられた、メモリアドレス５１０およびデータ値５２０を示す。アドレス５０３、５０５、および５０６のメモリ領域に対するデータ値は、個人情報の特性を有することが識別エンジンによって識別されたデータ値であることを示すために下線が引かれている。図５Ｂは、個人情報の特性を有するデータ値が、単一の上書き値“９９９”で書き換えられた場合の、トリアージダンプで見られるであろう値をデータ値５５０が有する、テーブル５３０を示す。
【００７０】
当業者には、任意の上書き値を使用することができることは明らかかであろう。いくつかの実施形態において、上書き値は、ヌルポインタ値以外のものとすることができる。「ヌルポインタ値」は、コンピュータシステム２１０が、データの欠如を示すために使用する値である。ヌルポインタ値は、コンピュータシステムによって決定された任意の値とすることができ、任意の特定の数量に限定されない。例えば、図４および図５Ａの例において、アドレス５０７のメモリ領域は、値０００を備える。この例において、０００は、ヌルポインタ値である。したがって、他のデータ値を書き換えるために使用される上書き値は、０００にしてはいけない。ソフトウェア開発者１３５が、元々ヌルポインタ値であったデータ値を、書き換えられたデータ値と区別することができるよう制限する。
【００７１】
当業者は、本発明の実施形態が、８個または１６個の１６進数字の１６進値によってそれぞれ表すことができる、３２ビットワードまたは６４ビットワードであるデータ値を使用することができることを認識するであろう。例えば、３２ビットシステムにおいて、３２ビットすべてが“１”である場合、１６進数０ｘＦＦＦＦＦＦＦＦによって表される。いくつかの実施形態において、すべてのデータ値を書き換えるための上書き値は、同じ１６進数としてもよい。例えば、０ｘＣＣＣＣＣＣＣＣを、すべての書き換えに使用する所定の上書き値とすることができる。
【００７２】
いくつかの実施形態において、選択された上書き値は、上書きするデータ値の関数とすることができる。このようにして、より多くの情報を、何らかの個人情報を送信することなく、ソフトウェア開発者１３５に伝えることができる。例えば、第１の範囲内のすべてのデータ値は、第１の上書き値で上書きすることができ、一方、第２の範囲内のすべてのデータ値は、第２の上書き値で上書きすることができる。この技術を使用する一実施形態は、図５Ｃにおけるテーブル５７０によって示される。この例において、書き換えられる１から１４９の範囲内のデータ値は、上書き値９９９で上書きされ、書き換えられる１５０から２９９の範囲のデータ値は、上書き値９９８で上書きされ、さらに、書き換えられる８５０から９９９の範囲のデータ値は、上書き値９９７で上書きされる。これらの上書きされた値５９０は、テーブル５７０に示される。
【００７３】
いくつかの実施形態において、負の値、すなわち大きな負の値を表すデータ値が、特定の値で書き換えられた場合、ソフトウェア開発者１３５によって実行される解析の助けとなる可能性がある。これは、ソフトウェアにおけるラップ・アラウンド・エラーを識別する助けとなるであろう。大きな負の値を識別するために使用される特定の基準は、ワードサイズおよび他のファクタに左右される可能性がある。しかし、一例として、特定の上書き値と関連づけられる大きな負の値は、閾値より大きい大きさを有するものとして識別される可能性がある。この閾値は、任意の適切な方法で選択することができる。しかし、具体例において、閾値は、コンピュータシステムが表すことのできる最も大きな負の値の１５％以内に、または、いくつかの実施形態において、１０％以内になるよう、選択することができる。同様の技術を使用して、大きな正の値を識別すること、および異なる上書き値を大きな正の値と関連づけることができる。
【００７４】
いくつかの実施形態において、選択された上書き値は、メモリ領域と関連づけられたメモリ保護オプションの機能とすることができる。例えば、メモリ領域は、読取り専用、実行専用、実行ならびに読み取り、または任意の他のメモリ保護オプションであるメモリ・ページに格納することができる。一例として、３２ビットシステムは、上書き値０ｘ００００００１０を使用して、読取り専用メモリに格納された個人情報と判断されたすべてのデータ値を書き換えることができる。同じシステムは、上書き値０ｘ００００００２０を使用して、実行専用メモリに格納された個人情報と判断されたすべてのデータ値を書き換えることができ、それらのダンプされたデータ値を有するメモリ領域の数は、総メモリのごく一部に制限される。
【００７５】
いくつかの実施形態において、選択エンジンは、乱数発生器３３５を使用して、ランタイムで上書き値を生成することができる。当業者は、乱数発生器３３５が、当分野で既知の技術を使用する任意の適切な方法で実現することができることを理解するであろう。例えば、乱数発生器３３５は、選択エンジン３３０のコンポーネントとすることができ、または、選択エンジンによって、乱数をもたらすために呼び出されるＯＳ２３４のコンポーネントとすることができる。当業者はまた、乱数発生器３３５を、擬似乱数発生器、または擬似乱数発生器を提供する任意のコンポーネントとしてもよいことを理解するであろう。
【００７６】
いくつかの実施形態において、異なる乱数が、書き換えられた各データ値に対して選択される。乱数を、特定の範囲の値に制限することもまた有益であろう。例えば、図４の例において、上書き値は、９００から９９９の範囲に制限することができる。したがって、書き換えられる各データ値に対して、選択エンジン３３０は、特定の範囲内で値をランダムに生成し、上書き値として使用する。このことは、いくつかの実施形態で、上書き値が、トリアージダンプ生成処理において書き換えられなかったデータ値のいずれとも一致しないことを保証することができる。上書き値が、書き換えられなかったトリアージダンプにおけるデータ値のいずれとも一致しないことを保証することは、任意の適切な方法で行うことができる。例えば、乱数発生器からの値は、フィルタされて、書き換えられなかったトリアージダンプ値のいずれとの衝突も避けることができる。
【００７７】
同じデータ値の各インスタンスに対して同じランダムな上書き値を使用することによって、より多くの情報を、ソフトウェア開発者１３５にもたらすことができる。例えば、この方法で生成した情報は、ソフトウェア開発者１３５が、コールスタックによりデータを追跡すること、およびソースで問題を識別することの助けとすることができる。同じランダムな上書き値は、書き換えられたデータ値、およびデータ値が上書きされたランダムな上書き値の追跡を続けることによって選択することができる。この情報は、任意の適切な方法でマッピングすることができる。例えば、データ値およびランダムな上書き値は、テーブルに格納することができる。したがって、選択エンジン３３０が、書き換えるべき次のデータ値に直面すると、選択エンジンは、まず、テーブルをチェックし、データ値が以前に書き換えられたかどうかを判断する。その場合、次いで、テーブルで示された同じランダムな上書き値を使用して、次のデータ値を書き換える。そうでなければ、新しいランダムデータ値を選択して、テーブルに追加する。ユーザ１１５のプライバシーは、この方法で、依然として維持され、というのも、全マッピング情報を有するのはユーザのコンピュータ１１０のみだからである。トリアージダンプが外部サーバ１５０に送信されると、上書き値のみが送信され、元のデータ値は送信されない。したがって、ソフトウェア開発者１３５は、トリアージダンプの値が、ユーザの個人情報のいずれも明らかにすることなく、書き換えられたと知らされる。
【００７８】
トリアージ・ダンプ・エンジン３１０は、個人情報の特性を有すると判断されたデータ値を、選択エンジン３３０によって選択された上書き値で実際に上書きするための上書きエンジン３４０を備えることができる。データ値を上書きすることは、任意の適切な方法で実行することができる。例えば、データ値は、まず、別々のファイルに対してダンプされ、次いで、ファイル内で上書きされてもよい。しかし、他の手法を使用してもよい。いくつかの実施形態において、例えば、上書きは、メモリ４００内で直接実行してもよく、または、データ値をファイルにコピーしている際に実行してもよい。前述のように、ヌルポインタ値と同じ値を有するデータ値を維持するために有益である可能性がある。したがって、ヌルポインタ値が、コンピュータＯＳ２３４によって定義されたように、ポインタの特性に合うよう扱われた場合でさえ、ヌルポインタ値を保持することができる。例えば、３２ビットシステムにおいて、ヌルポインタ値は、０ｘ００００００００とすることができる。
【００７９】
トリアージ・ダンプ・エンジン３１０は、トリアージダンプをコンピュータシステム１１０の外部に送信するために、通信エンジン３５０を備えることができる。通信エンジンは、任意の適切な方法で動作することができる。例えば、通信エンジンは、トリアージダンプを、当分野で既知のエラー報告技術を使用して、外部サーバ１５０に送信することができる。サーバ１５０は、ソフトウェア開発者１３５と関連づけることができる。
【００８０】
図６を参照すると、トリアージダンプを生成するための実施形態の方法についてのフローチャートを示す。この方法は、トリアージ・ダンプ・エンジン３１０、または任意の他の適切なコンポーネントにより実行することができる。方法６００は、６０２で、トリアージダンプの生成を始めることによって開始する。トリアージダンプの生成は、任意の適切な方法で開始することができる。いくつかの実施形態において、コンピュータシステム１１０において発生する何らかの条件に対する応答により開始する。例えば、条件とは、処理ユニット２２０で実行するソフトウェアでの何らかの種類の問題である可能性がある。問題とは、プログラムのクラッシュまたはハングである可能性がある。そのような条件は、当分野で既知の技術を使用して検出することができる。しかしながら、本発明の実施形態は、任意の特定の開始ステップに限定されない。
【００８１】
方法６００は、動作６０４で続けることができ、識別エンジンが、保持対象である、メモリ内に格納されたデータ値を識別する。この例において、値は、ポインタの特性を有するかどうかに基づいて識別される。ポインタであるデータ値は、後にトリアージダンプの解析をするために有益であり、そのため、この例では書き換えない可能性がある。識別するための任意の適切な方法を使用することができる。例えば、データ値がポインタである場合に、データ値が指し示す位置をテストする上述の技術を使用することができる。いくつかの実施形態において、ポインタとして解釈された場合のデータ値が、トリアージダンプ生成を開始したソフトウェアプログラムの現在状態に関連すると判断されたメモリの部分を指し示す場合、データ値は、ポインタの特性を有すると識別される可能性がある。関連するデータ値は、プログラムコード、ライブラリコード、またはコールスタックと関連づけられたデータである可能性がある。いくつかの実施形態において、関連するデータは、他のポインタ、カーネル・モード・オブジェクトに対するハンドル、またはヒープデータを備えることができる。
【００８２】
方法６００は、動作６０６で続けることができ、識別エンジン３２０が、個人データの特性を有する、メモリ内に格納されたデータ値を識別する。個人情報であるデータ値は、後の解析に有益である可能性はなく、ユーザのプライバシーを保証するために書き換えることができる。識別するための任意の適切な方法を使用することができる。例えば、動作６０４においてポインタの特性を有すると識別されなかった、または保持対象と識別されなかったデータ値は、個人データの特性を有すると識別することができる。
【００８３】
方法６００は、動作６０８で続けることができ、選択エンジン３３０により、識別したデータ値を書き換える上書き値を選択する。上書き値を選択するための任意の適切な方法を使用することができる。例えば、上書き値を選択するための上記技術のいずれかを使用することができる。いくつかの実施形態において、同じ上書き値を、すべてのデータ値に対して使用することができる。他の実施形態において、上書き値は、上書きされるデータ値に基づく可能性がある。いくつかの実施形態において、上書き値は、乱数発生器を使用して、ランダムに選択される。
【００８４】
方法６００は、動作６１０で続けることができ、上書きエンジン３４０が、動作６０８で選択された上書き値で、個人データの特性を有すると識別された各データ値を上書きする。上書きするための任意の適切な方法を使用することができる。例えば、前述のように、上書きは、別々のトリアージ・ダンプ・ファイルにおいて、またはメモリ４００自体において、行うことができる。
【００８５】
方法６００は、動作６１２で続けることができ、通信エンジンが、生成したトリアージダンプを、外部サーバに送信する。送信するための任意の適切な方法を使用することができる。例えば、前述のように、トリアージダンプは、コンピュータネットワーク１２０上で送信することができる。いくつかの実施形態において、トリアージダンプは、ディスク上に配置することができ、任意の適切な方法で、開発者に配信することができる。他の例において、トリアージダンプは、ソフトウェア開発者によって使用されるコンピュータで生成することができ、したがって、トリアージダンプが生成されたのと同じコンピュータで直接格納することができる。方法６００は、トリアージダンプをソフトウェア開発者に送信した後、動作６１４で終了する。
【００８６】
図６は、トリアージ・ダンプ・ファイルを生成するために使用することができる方法の一例であるが、他の方法を使用してもよいことを認識すべきである。トリアージダンプを生成するための他の例示的方法７００を、図７のフローチャートで示す。動作７０２で、識別エンジンが、上書きするデータ値を決定することができる。上記のように、この動作７０２は、任意の適切な方法で実現することができる。
【００８７】
方法７００は、動作７０４で続けることができ、識別されたデータ値が、以前に上書きされたデータ値と比較される。識別されたデータ値が、以前に書き換えられなかった場合、上書き値は、動作７０６で、データ値に対して決定される。この決定７０６は、任意の適切な方法で実現することができる。例えば、乱数発生器を使用して、ランダムな上書き値を生成することができる。いくつかの実施形態において、ランダムな上書き値は、所定の範囲の値となるよう制限することができ、および／または他の方法で制限することができ、各上書き値が、上書きされるただ１つの値に対応することを保証する。
【００８８】
上書き値が動作７０６で決定されると、方法７００は、動作７０８で続けることができ、決定された上書き値が、データ値と共にテーブルに格納され、その結果、トリアージ・ダンプ・エンジン３１０は、以下に説明するように、動作７０４を実現する後続の繰返しにおいて、データ値を検索することができる。
【００８９】
動作７０４で、トリアージ・ダンプ・エンジン３１０によってデータ値が以前に書き換えられたと判断された場合、方法７００は動作７１０で継続し、特定のデータ値に対して以前に使用された上書き値が、コンピュータのメモリに格納されたテーブル内で検索され、トリアージ・ダンプ・エンジン３１０によって維持される。
【００９０】
データ値が以前に書き換えられなかった場合の動作７０８、またはデータ値が以前に書き換えられた場合の動作７１０のいずれかの後、方法７００は動作７１２で継続する。動作７１２で、上書きエンジン３４０は、データ値を、決定した上書き値で上書きし、その上書き値は、動作７１０におけるテーブルからか、または動作７０６において新しい上書き値を生成することによって決定される。
【００９１】
方法７００は、動作７１４で継続し、書き換える必要があるデータ値がまだあるかどうかを判断する。トリアージダンプの生成を完了する前に書き換える必要のあるデータ値がまだあると判断した場合、方法７００は動作７０２に戻り、上述の動作をさらに繰り返す。動作７１４で、書き換える必要のあるデータ値がもう無いと判断されると、本方法は動作７１６に続き、生成したトリアージダンプを、ソフトウェア開発者によって解析するために、外部サーバに送信する。本方法は、その後、動作７１８で終了する。
【００９２】
図６および図７と関連して説明した上記方法の実施形態は、本明細書で説明した動作のそれぞれ、およびすべてを実行するために制限されない。本方法のすべての動作は、上記したそのままの順序で実行する必要はない。例えば、いくつかの実施形態では、動作６０６において個人データの特性を有するデータ値を識別した後、動作６０４でポインタの特性を有するデータ値を識別することができる。他の実施形態において、ポインタの特性を有するデータ値を識別する動作６０４を全く実行しなくてもよい。当業者は、上記実施形態が、本発明の態様を使用する方法の特定の例に過ぎないことを理解するであろう。
【００９３】
上記のように、データ値を書き換える目的は、トリアージダンプのサイズを減らすためではなく、ソフトウェアユーザのプライバシーを保護することであることにも留意すべきである。しかしながら、トリアージダンプの書き換えは、圧縮を使用した場合、トリアージダンプのサイズを減らすことができる。トリアージダンプは、当分野で既知の、任意の適切な方法で圧縮することができる。
【００９４】
したがって、本発明の少なくとも１つの実施形態のいくつかの態様を説明したが、種々の変更、修正、および改良が当業者には容易に行えるであろうことを理解されたい。
【００９５】
そのような変更、修正、および改良は、本開示の一部であることが意図され、さらに本発明の精神および範囲内にあることが意図される。さらに、本発明の利点を示したが、本発明のすべての実施形態が記載した利点のすべてを必ずしも含まないことが理解されるべきである。いくつかの実施形態は、本明細書およびいくつかの例において利点として説明した特徴のいずれかを実施しない可能性がある。したがって、上記説明および図面は、例に過ぎない。
【００９６】
上述した本発明の実施形態は、任意の多数の方法で実現することができる。例えば、本実施形態は、ハードウェア、ソフトウェア、またはそれらの組合せを使用して実現することができる。ソフトウェアで実現する場合、ソフトウェアコードは、単一のコンピュータ内に設けられるか、または複数のコンピュータ間に分散される、任意の適切なプロセッサ、またはプロセッサの集合で実行することができる。そのようなプロセッサは、集積回路部品内に１つまたは複数のプロセッサを有する、集積回路として実現してもよい。しかし、プロセッサは、任意の適切なフォーマットで、回路を使用して実現してもよい。
【００９７】
また、本明細書で概説したさまざまな方法または処理は、さまざまなオペレーティングシステムまたはプラットフォームの任意の１つを使用する１つまたは複数のプロセッサで実行可能なソフトウェアとしてコーディングすることができる。さらに、そのようなソフトウェアは、多くの適切なプログラミング言語および／またはプログラミングもしくはスクリプティングツールのいずれかを使用して書いてもよく、またフレームワークもしくは仮想マシンで実行される実行可能な機械語コードもしくは中間コードとしてコンパイルすることができる。
【００９８】
「プログラム」または「ソフトウェア」という用語を一般的な意味で本明細書において使用する場合、上記のような本発明のさまざまな態様を実現するために、コンピュータもしくは他のプロセッサをプログラムするために使用することができる、任意のタイプのコンピュータコードもしくはコンピュータ実行可能命令のセットのことを意味する。さらに、本実施形態の一態様によれば、本発明の実行方法が実行された場合に、１つまたは複数のコンピュータプログラムは、単一コンピュータもしくはプロセッサ上にある必要はないが、本発明のさまざまな態様を実施するために、多数の異なるコンピュータもしくはプロセッサ間で、モジュラ方式で分散させてもよいことを認識すべきである。
【００９９】
コンピュータ実行可能命令は、１つまたは複数のコンピュータまたは他のデバイスによって実行される、プログラムモジュールなどの、多くの形式をとることができる。一般に、プログラムモジュールは、特定のタスクを実行するか、または特定の抽出データ型を実施する、ルーチン、プログラム、オブジェクト、コンポーネント、およびデータ構造など含む。典型的に、プログラムモジュールの関数は、さまざまな実施形態において要望されるように組み合わせるか、または分散することができる。
【０１００】
また、データ構造は、任意の適切な形式で、コンピュータ読取り可能媒体に格納することができる。図面を簡単にするために、テーブルなどのデータ構造は、データ構造内の位置を通じて関連したフィールドを有するよう示すことができる。そのような関連は、フィールドに対する記憶領域を、フィールド間の関連を伝えるコンピュータ読取り可能媒体内の位置に割り当てることによって、同じように達成してもよい。しかしながら、任意の適切な機構を使用して、データ構造のフィールドにおける情報間の関連を確立することができ、ポインタ、タグ、または、データ要素間の関連を確立する他の機構の使用によるものを含む。
【０１０１】
本発明のさまざまな態様は、単独で、組み合わせて、または上記した実施形態において具体的に説明していないさまざまな構成で使用することができ、したがって、その用途は、上記した、または図面に示した構成要素の詳細および構成に限定されない。例えば、一実施形態において説明した態様は、他の実施形態で説明した態様と、任意の方法で組み合わせることができる。
【０１０２】
また、本発明は、少なくとも１つの例を提供した方法として実施することができる。本方法の一部として実行した動作は、任意の適切な方法で配列することができる。それに応じて、実施形態は、図示とは異なる順序で動作を実行するよう構成することができ、例示的実施形態では連続的な動作として示したが、いくつかの動作を同時に実行することを含むことができる。
【０１０３】
クレーム要素(発明特定事項)を修飾するための請求項における「第１の」「第２の」「第３の」などのような順序を表す用語の使用は、それ自体によって、１つの方法の動作を実行する他のもしくは時間的順序にわたる１つのクレーム要素の何らかの優先度、優先順位、または順序を意味するものではないが、単にラベルとして使用され、（順序を表す用語の使用を別にすれば）ある名前を有する１つのクレーム要素を、同じ名前を有する他の要素と区別し、クレーム要素を区別する。
【０１０４】
また、本明細書で使用される表現および用語は、説明の目的のためであり、限定するものとみなされるべきではない。本明細書での「含む」「備える」または「有する」「含有する」「伴う」およびそれらのバリエーションの使用は、その後に列挙される項目およびその等価物、ならびに追加項目を包含することを意味する。
【図１】
0005875690.tif 000002
【図２】
0005875690.tif 000003
【図３】
0005875690.tif 000004
【図４】
0005875690.tif 000005
【図５Ａ】
0005875690.tif 000006
【図５Ｂ】
0005875690.tif 000007
【図５Ｃ】
0005875690.tif 000008
【図６】
0005875690.tif 000009
【図７】
0005875690.tif 000010