JP6363152B2 - データフロー分析のための装置、方法、コンピュータプログラム及び記憶媒体 - Google Patents

データフロー分析のための装置、方法、コンピュータプログラム及び記憶媒体 Download PDF

Info

Publication number
JP6363152B2
JP6363152B2 JP2016225010A JP2016225010A JP6363152B2 JP 6363152 B2 JP6363152 B2 JP 6363152B2 JP 2016225010 A JP2016225010 A JP 2016225010A JP 2016225010 A JP2016225010 A JP 2016225010A JP 6363152 B2 JP6363152 B2 JP 6363152B2
Authority
JP
Japan
Prior art keywords
software program
instruction
memory
link
memory corruption
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2016225010A
Other languages
English (en)
Other versions
JP2017117442A (ja
Inventor
クレーエン アンドレアス
クレーエン アンドレアス
Original Assignee
インテル コーポレイション
インテル コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by インテル コーポレイション, インテル コーポレイション filed Critical インテル コーポレイション
Publication of JP2017117442A publication Critical patent/JP2017117442A/ja
Application granted granted Critical
Publication of JP6363152B2 publication Critical patent/JP6363152B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • G06F11/362Debugging of software
    • G06F11/3636Debugging of software by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • G06F11/362Debugging of software
    • G06F11/3644Debugging of software by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • G06F11/362Debugging of software
    • G06F11/3624Debugging of software by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • G06F11/362Debugging of software
    • G06F11/366Debugging of software using diagnostics
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Description

あるメモリロケーションの内容が、プログラミングエラーに起因して意に反して変更されてしまう場合、コンピュータプログラムにメモリ破損(memory corruption)が生じ得る。破損したメモリ内容がそのプログラムの中で後に使用されると、プログラムのクラッシュ、或いは、予想外の(通常は)望まれないプログラム挙動を招く。
メモリ破損は少なくとも2つの理由から直すことが困難になり得る:1)メモリ破損の原因(ソース)とその発現が隔たっており、原因と結果とを関連付けることを困難にしている。2)そのようなエラーは通常ではない状態でしか発生せず、エラーの一貫性のある再現を困難にしている。
メモリ破損をデバッグする場合、一般的なデバッグアプローチは、破損したメモリロケーションに書き込んだ以前のコードロケーションを発見するために、データアドレストレースを利用している。しかしながら、データアドレストレースは、パフォーマンスオーバーヘッドの観点から高価になってしまう。これに対して、プロセッサトレースは、デバッグ用の論理CPUスレッドに関し、比較的コンパクトなランタイムのプログラム制御フロートレースをもたらすが、データアドレストレースを提供しない。
「破損したロケーションへの最後の保存を発見する」問題に対する既存のハードウェアデバッグソリューションは、少なくともアドレストレース又は完全なデータトレース、或いは、ハードウェアにおけるリプレーをサポートすることさえ必要とする。しかしながら、データアドレストレースは、高速アウトオブオーダーコアをハードウェアで実現するのには高価であり;トレース情報を記録するために必要な帯域幅に起因して大きなオーバーヘッドを持つことになってしまう。プログラムスライシング法(program slicing techniques)は破損している保存部を特定することが可能であるが、一般に、コンパイラーにおける完全なプログラムフローグラフに対する装備されたコード及びアクセスを必要とする。小さなプログラムにおけるメモリ破損はプログラムスライシング法で対処することが可能であるが、より複雑なプログラムに対しては妥当でない。
何らかの特定の要素又は動作の議論を容易に特定できるようにするため、参照番号中の最上位桁は、その要素が最初に導入される図番号を指している。
サーバー200及びクライアントデバイス104がネットワーク102に接続される簡略化して描かれたシステム100を示す図。 一実施形態によるサーバー200を示す図。 一実施形態のデバッグサーバーデータストアの機能ブロック図。 メモリ分析モジュールの一例を示すフローチャート。 実行モジュールの一例を示すフローチャート。
図1はデバッグサーバー200がソフトウェアプログラムのメモリ破損をデバッグするために使用されるシステム100を示す。
概して、(図2に関連して更に図示及び説明される)デバッグサーバーは、ハードウェアユニットを有するプロセッサトレースモジュール224を有し、ハードウェアユニットは、ランタイムプログラム制御フロートレースを含むプログラム制御フロートレース情報を提供する。プロセッサトレースモジュール224は、例えば、デバッグサーバー200における1つ以上の中央処理ユニット210に組み込まれる又はそれと通信する1つ以上のインテル(登録商標)プロセッサトレースユニットであってもよい。
プロセッサトレースモジュール224は、実行フローを記録し、後の時点で実行フローが再構築されることを可能にする。プロセッサトレースモジュール224は、個別ハードウェア手段を利用して、各々のハードウェアスレッドのソフトウェア実行に関する情報をキャプチャし(中央処理ユニット210において複数のプロセッサコアが存在することが仮定されている、或いは、あたかも同時マルチスレッディング(ハイパースレッディング(HyperThreading))がアクティブであるかのように、単独のコアが複数のスレッドを実行することが仮定されている)、そのため、実行が完了した後に、キャプチャされたトレースデータから、完全なプログラムフローが再構築されることが可能である。
プロセッサトレースモジュール224は、データパケットで制御フロートレーシング情報をキャプチャ(又は取得)し、その情報は、例えば、ベーシックブロック、タイミング及びプログラムフロー情報(例えば、ブランチターゲット、分岐する/分岐しない指示)及びプログラム誘導モード関連情報(例えば、インテルTSX状態遷移、CR3変更)を含む。ベーシックブロックは、本願では、ソフトウェア命令へのエントリ以外に入る分岐を有しておらず、ソフトウェア命令の出口以外で出る分岐を有していないソフトウェア命令として規定される。プロセッサトレースモジュール224からの情報は、ベーシックブロック、ブランチターゲット及び行われた分岐を表現するノードとして表現されてもよい。しかしながら、プロセッサトレースモジュール224は、メモリロケーションのアドレスをリスト化するアドレストレース情報を提供しない。
プロセッサトレースモジュール224からのパケットは、例えばデバッグサーバーモジュール300のようなメモリサブシステムに送信されて保存される前に、内部でバッファリングされる。保存される場合に、これらのパケットは、まとめて、ランタイムプログラム制御フロートレース(Runtime Program Control Flow Trace)310のレコードとして言及される。これらのパケットは「ランタイム(Runtime)」のように言及され、その理由は、それらが、コンパイルソフトウェアプログラム304の特定目的の実行中のような別の時間に収集されるのではなく、デバッグされるべきメモリ破損を生じさせるコンパイルソフトウェアプログラム304の通常のランタイムで収集されるからである。
上述したように、メモリ破損は、デバッグされるプログラミングエラーの形式をしている。ウィンドウズ(登録商標)オペレーティングシステムを動作させるシステムにおけるアプリケーションクラッシュのうち約10%は、ヒープ破損(heap corruption)に起因することが推測されている。プログラミングエラーに起因してメモリロケーションが意図せずに変更されてしまう場合、メモリ破損が生じる。これは、そのようなエラーを減らそうとする技法やプログラミング言語の状況でさえ生じ得る。
メモリ破損をデバッグする一般的な方法は、破損したメモリロケーションに書き込みを行ったベーシックブロックを特定し、それらのコンポーネントにデバッグの労力を注ぐことである。アドレストレースは、何れのベーシックブロックがメモリロケーションに書き込んだのかについての情報を提供するが、アドレストレースは、実現するには高価であり、特に、高速なアウトオブオーダーコアが高くつく。アドレストレースは、アドレストレース情報を記録するために大きな帯域幅オーバーヘッドを必要とする。
プロセッサトレースモジュール224からのランタイムプログラム制御フロートレース310は、比較的コンパクトであり、小さな帯域幅オーバーヘッドしか必要としないが、何れのコードロケーションがメモリ破損を書き込んだかを発見するために必要なアドレストレース情報を提供しない。
メモリ破損のデバッグでランタイムプログラム制御フロートレース310の利用を許容するために、ソフトウェアプログラムは、個々のプログラムソース104において又はデバッグサーバー300において局所的に、コンパイルされたソフトウェアプログラムにコンパイルされる。デバッグサーバー200においてローカルにコンパイルされる場合、ソフトウェアプログラムは、ソフトウェアプログラム302としてデバッグサーバーメモリ300に保存され;コンパイルされたソフトウェアプログラムは、コンパイルされたソフトウェアプログラム304としてデバッグサーバーメモリ300に保存される。コンパイルは、例えば、デバッグサーバー200におけるコンパイラーモジュール214のようなコンパイラーにより実行される。コンパイルは、実質的に実行の前になされてもよいし或いは「ジャストインタイム(just in time)」でなされてもよく、後者の場合、バイトコード又はプログラムソースコードをランタイムにネイティブのマシンコードにコンパイルする。
コンパイルされる場合に又はコンパイルの最中に、デバッグ情報がコンパイラーにより準備されてもよい。デバッグ情報は、例えば、コンパイルされたソフトウェアプログラム304におけるベーシックブロックのリスト、ベーシックブロックのデータタイプ又はデータタイプの構造、各々のベーシックブロックの命令アドレスを、ソフトウェアプログラムの1つ以上の対応する部分にリンク又はマッピングするリンクを含んでもよい。デバッグ情報は、送信され、生成され、又は、デバッグサーバーモジュール300に存在し、それはデバッグ情報306レコードとして保存されてもよい。
本願で更に説明されるように、デバッグ情報306のレコード及びランタイムプログラム制御フロートレース310のレコードは、(概して)以下のプロセスi)ないしv)に従って結び付けられる:i)メモリ破損が識別される;ii)コード分解モジュールを利用して、メモリ破損を生じさせた命令の具体的なメモリアドレスを直接的に又はレジスタを特定する(メモリ破損は、直接的に指定されたメモリアドレスであってもよいし、ロード(load)の場合には入力レジスタ又は間接的な入力レジスタであってもよいし、或いは、保存の場合にはポインタ、出力レジスタ、間接的な出力レジスタ−本願ではまとめて「レジスタ」と言及される);iii)(「保存」又は「保存命令」により)レジスタにロードされたベーシックブロックを特定するためにコード分解モジュールを利用して、ランタイムプログラム制御フロートレース310が、メモリ破損から「逆探知される(walked back)」又は探知される;iv)デバッグ情報306のレコードが、メモリ破損により使用されているデータタイプ又はデータタイプの構造を特定するために使用される;及びv)これは、ベーシックブロックのリスト及びベーシックブロックのデータタイプ又はデータタイプの構造と照合され、メモリ破損を生じさせることが可能であったベーシックブロック中の保存命令候補を発展させる。保存命令候補は、(デバッグを行う者である)ユーザーに返され、及び/又は、保存命令候補はインストルメンテーション(又は計装)モジュールに渡され、インストルメンテーションモジュールは、メモリ破損を引き起こした適確な保存命令が、実現された再コンパイルバージョンの将来的な実行で識別され且つデバッグされることが可能になるように、ソフトウェアプログラムを計測するために使用される。
図1の説明に関し、様々な実施形態において、ネットワーク102は、インターネット、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、及び/又は、その他のデータネットワークを含んでもよい。従来のデータネットワーキングプロトコルに加えて、一実施形態では、データは、近距離無線通信(NFC)、ブルートゥース(登録商標)、電力線通信(power-line communication:PCL)等に従って通信されてよい。ネットワーク102は、必須ではないが、他のコンピューティングデバイスと通信するために使用されてよい。
様々な実施形態において、デバッグサーバー200、プログラムソース104及びデバッグクライアント106は、デスクトップPC、モバイルフォン、ラップトップ、タブレット、ウェアラブルコンピュータ、又は、スタンドアローン又はネットワーク化されたコンピュータであってもよい他のコンピューティングデバイスを含んでもよい。プログラムソース104は、ソフトウェアプログラムのソース、デバッグ情報のソース及び/又はコンパイルされたソフトウェアプログラムのソースであってよい。デバッグクライアント106は、ソフトウェアプログラマ又はデバッグするサービスプロバイダ等のような者により使用されてもよく、サービスプロバイダは、例えばデバッグサーバー200にソフトウェアデバッギングサービスを提供する。
様々な実施形態において、追加的なデバイスだけでなく追加的なインフラストラクチャ(例えば、ショートメッセージサービスセンタ、セルサイト、wifi基地局、ルーター、ファイヤウォール等)が存在してもよい。更に、一実施形態では、図1に示される他のデバイス又はデバッグサーバー200により提供されるように説明された機能は、物理的及び/又は論理的なデバイスの様々な組み合わせにより実現されてもよい。しかしながら、例示的な実施形態を説明するために、図1においてそのようなインフラストラクチャ及び実現の詳細を示すことは必須でない。
図2は一実施形態による例示的なデバッグサーバー200の幾つかのコンポーネントを示す。様々な実施形態において、デバッグサーバー200は、デスクトップPC、サーバー、ワークステーション、モバイルフォン、ラップトップ、タブレット、セットトップボックス、アプライアンス、又は、本願で説明されるような動作を実行することが可能な他のコンピューティングデバイスを含んでもよい。一実施形態において、デバッグサーバー200は、図2に示されるものより多い数のコンポーネントを含んでもよい。しかしながら、例示的な実施形態を開示するために、これら一般的な通常のコンポーネントの全てが示される必要はない。
上述されるように、デバッグサーバー200はプロセッサトレースモジュール224を有し、プロセッサトレースモジュール224は、ランタイムプログラム制御フロートレースを含むプログラム制御フロートレース情報を提供する有線形式のユニットであってもよい。プロセッサトレースモジュール224は、例えば、デバッグサーバー200における1つ以上の中央処理ユニット210に組み込まれる又はそれと通信する1つ以上のインテル(登録商標)プロセッサトレースユニットであってもよい。
様々な実施形態において、デバッグサーバー200は、本願で説明される機能をまとめて提供する1つ以上の物理的及び/又は論理的なデバイスを有してもよい。一実施形態において、デバッグサーバー200は1つ以上の再現される及び/又は分散される物理的又は論理的なデバイスを有してもよい。
一実施形態において、デバッグサーバー200は、「クラウドコンピューティング」プロバイダから提供される1つ以上のコンピューティングリソースを有し、例えば、ワシントン州シアトルのアマゾン社(Amazon.com)により提供される「Amazon Elastic Compute Cloud("Amazon EC2")」;カリフォルニア州レッドウッドシティーのオラクル(登録商標)コーポレーションにより提供される「Oracle Cloud Compute Utility」;ワシントン州レッドモンドのマイクロソフト(登録商標)コーポレーションにより提供される「Windows Azure」等であってもよい。
デバッグサーバー200は、ネットワークインターフェース208、ディスプレイ206、中央処理ユニット210及びメモリ210を含む複数のコンポーネントを相互接続するバス202を含む。
メモリ204は、一般に、ランダムアクセスメモリ(RAM)及び永続的な非一時的な大容量ストレージデバイスを含み、例えば、ハードディスクドライブ又はソリッドステートドライブを含んでもよい。メモリ204はオペレーティングシステム212を保存している。
これら及び他のソフトウェアコンポーネントは、フロッピディスク、テープ、DVD/CD-ROMドライブ、メモリカード等のような非一時的なコンピュータ読み取り可能な媒体216に関連するドライブメカニズム(図示せず)を利用して、デバッグサーバー200のメモリ204にロードされてもよい。
メモリ204はデバッグサーバーメモリ300も含む。一実施形態において、デバッグサーバー200は、ネットワークインターフェース208、ストレージエリアネットワーク(storage area network:SAN)、高速シリアルバス、及び/又は、適切な他の通信技術により、デバッグサーバーメモリ300と通信してもよい。
一実施形態において、デバッグサーバーメモリ300は、「クラウドストレージ」プロバイダから提供される1つ以上のストレージリソースを有してもよく、例えば、ワシントン州シアトルのアマゾン社により提供される「Amazon Simple Storage Service ("Amazon S3")」;カリフォルニア州マウンテンビューのグーグル社(Google, Inc.)により提供される「Google Cloud Storage」等であってもよい。
図3に示されるデバッグサーバーメモリ300の例示的なコンポーネントは、モジュール又はソフトウェアルーチンにより使用されるデータグループであり、図面を参照しながらさらに議論される。
図3に示されるルーチンにより使用されるデータグループは、カラムに属するセル、又は、ディジタルドキュメント又はファイルの所定の構造における他の値と区別される値により表現される。個々のレコード又はエントリとして本願では言及されているが、レコードは1つより多いデータベースエントリを含んでいてもよい。データベースエントリは、ナンバー(又は数)、数値オペレータ、バイナリ値、論理値、テキスト、文字列オペレータ、ジョイン(join)、条件付き論理、テスト等であってもよいし、それらを表現してもよいし或いはそれらをエンコードしていてもよい。
メモリ分析モジュール400は、図4に示されるように、例えばデバッグサーバー200により実行されてもよい。
ブロック402において、メモリ分析モジュール400は、コンパイルされたソフトウェアプログラム及びデバッグ情報を取得する。これは、プログラムソース104のような第三者ソースから取得されてもよいし、或いは、ソフトウェアプログラム302に関するコンパイラーモジュール214の実行によりローカルに取得されてもよい。デバッグサーバーメモリ300に保存される場合、デバッグ情報はデバッグ情報306のレコードとして保存され、コンパイルされたソフトウェアプログラムはコンパイルされたソフトウェアプログラム304として保存されてよい。
ブロック404において、メモリ分析モジュール400は、選択的に、コンパイルされたソフトウェアプログラム304を実行してもよい。コンパイルされたソフトウェアプログラムの実行は、プログラムソース104及びデバッグクライアント106における又はそれらによること等のように、メモリ分析モジュール400を実行するコンピュータに対してリモートであってもよい。コンパイルされたソフトウェアプログラムの実行はクラッシュログ(crash log)を生成し、クラッシュログは、送信され、生成され、或いは、デバッグサーバーメモリ内でクラッシュログ320レコードとして保存されてよい。
ブロック406において、メモリ分析モジュール400は、コンパイルされたソフトウェアプログラム304における少なくとも1つのメモリ破損の識別(identification)を受信する。識別は、人間であるユーザーから受信されてもよいし、或いは、クラッシュログ320のようなクラッシュログからプログラムにより受信されてもよい。メモリ破損の識別は、メモリ破損により使用される及び/又は指定されるレジスタの識別を含んでもよい。メモリ破損は、メモリ破損308のレコードとしてデバッグサーバーメモリ300に保存されてよい。
ブロック408において、メモリ分析モジュール400は、プロセッサトレースモジュールから、ランタイムプログラム制御フロートレースを取得する。他の箇所で議論されているように、プロセッサトレースモジュールは、プロセッサトレースモジュール224のようなハードウェアに基づくものであってもよい。ランタイムプログラム制御フロートレースは、複数の中央処理ユニットに渡る又はそれらによるコンパイルされたソフトウェアプログラムの実行からの情報を含む。これは、コンパイルされたソフトウェアプログラム304のローカルな実行中に、例えばプロセッサトレースモジュール224からローカルに取得されてもよいし、或いは、例えばデバッグクライアント106等からのように、リモートソースから取得されてもよい。何れにせよ、それは、デバッグサーバーメモリ300のランタイムプログラム制御フロートレース310のレコードとして保存されてもよい。
ブロック408において、メモリ分析モジュール400は、コンパイルされたソフトウェアプログラム304のベーシックブロックのリストを、ランタイムプログラム制御フロートレース310から取得する。ベーシックブロックのリストは、デバッグサーバーメモリ300のベーシックブロック312のレコードとして保存されている。
ブロック410において、メモリ分析モジュール400は、例えばコード分解モジュール220を利用することにより、ベーシックブロックのリスト中のベーシックブロック312を分解し、データを保存することを意味する保存命令である又は保存命令を含むベーシックブロック312のレコードを識別し、データは、例えば、コンパイルされたソフトウェアプログラムを実行するコンピュータにおけるメモリロケーションに対する値、ベクトル、マトリクス又は変数である。保存命令は、保存命令314のレコードとしてデバッグサーバーメモリ300に保存されてもよい。
ブロック412では、メモリ分析モジュール400は、メモリ破損308のロケーションから、ランタイムプログラム制御フロートレース310を探知又は逆探知し、メモリ破損308のレジスタに書き込みを行った1つ以上の保存命令314を識別する。
ブロック414において、メモリ分析モジュール400は、デバッグ情報306の中で、メモリ破損308により指定又は使用されているデータタイプ又はデータタイプの構造と、保存命令314のデータタイプ又はデータタイプの構造とを識別する。これらは、データタイプ又はデータタイプの構造316のレコードとしてデバッグサーバーメモリ300に保存される。
開始ループブロック416ないし終了ループブロック426は、各々の保存命令314のレコードに関して反復される。
判定ブロック418において、メモリ分析モジュール400は、次の現在の保存命令314のレコードが、ブロック406で確認したようにメモリ破損308のレジスタに書き込みを行ったか否かを判定する。判定が否定的であった場合、メモリ分析モジュール400は、次の保存命令314に進み;処理されるべき更なる保存命令314のレコードが存在しない場合、メモリ分析モジュール400はブロック428に進む。
判定ブロック418において肯定的であった場合、メモリ分析モジュール400は判定ブロック420に進み、保存命令314がメモリ破損308と同じデータタイプ又は同じデータタイプ構造を有するか否かを判定する。判定ブロックにおいて否定的であった場合、メモリ分析モジュール400は、次の保存命令314に進み;処理されるべき更なる保存命令314のレコードが存在しない場合、メモリ分析モジュール400はブロック428に進む。
ブロック422において、メモリ分析モジュール400は、判定ブロック418及び判定ブロック420の双方で肯定的であった保存命令314のレコードに、候補の保存命令314である旨のフラグを設定し、これは、そのような保存命令がメモリ破損308のレジスタに書き込みを行ったこと、及び、メモリ破損308と同じデータタイプ又は同じデータタイプ構造316を有していたことを意味する。
ブロック424において、メモリ分析モジュール400は、あるリンクを取得し、そのリンクは、候補の保存命令314を(コンパイルされていない)ソフトウェアプログラム302の命令にリンクする又はマッピングする。このリンクは、例えば、デバッグ情報306から取得されてもよい。そのようなリンクは、リンク318のレコードとしてデバッグサーバーメモリ300に保存されてよい。
終了ループブロック426において、メモリ分析モジュール400は、必要に応じて、次の保存命令314に関する反復のために、開始ループブロック416に戻ってもよい。
ブロック428において、メモリ分析モジュール400は、ブロック422の候補の保存命令314、ブロック424のリンク318を、他のプロセス、モジュール又はユーザーへ渡す又は返す。
返された候補の保存命令314は、例えば、ソフトウェアプログラム302をデバッグするためにユーザーにより使用されてよい。候補の保存命令314及びリンク318は、例えば、ソフトウェアプログラム302を備えるようにインストルメンテーションモジュール500により使用され、計装(instrumentation)及び何らかのバグ対策を含む再コンパイルされたソフトウェアプログラム302の将来的な実行に関し、ベーシックブロック312をよりいっそう容易に識別する。
ブロック430が終了すると、メモリ分析モジュール400はそれを引き起こしたプロセスを終了する及び/又はそれに戻る。
図5に示されるように、インストルメンテーションモジュール500は、例えば、デバッグクライアント106又はプログラムソース104等のようなデバッグサーバー200又は別の適切なコンピュータにより実行されてもよい。
ブロック502において、インストルメンテーションモジュール500は、候補の保存命令及びリンクを、例えばメモリ分析モジュール400から受信し、リンクは、候補の保存命令を、ソフトウェアプログラムの一部分にリンクする又はマッピングする。候補の保存命令は候補の保存命令314のレコードであってもよく、ソフトウェアプログラムはソフトウェアプログラム302のレコードであってもよく、リンクはリンク318であってもよい。
ブロック504において、インストルメンテーションモジュール500は、計測する保存命令候補の選択を受信してもよい。これは、ユーザー又は他のプロセスにより提供されてもよい。これはオプションであり;インストルメンテーションモジュール500は、全ての保存命令候補についてソフトウェアプログラムを計測してもよい。本願で使用されるように、「インストルメンテーション」及び「ソフトウェアインストルメンテーション」は、以下のi)ないしiii)のうち少なくとも何れかを実行するコンピュータソフトウェア及び/又はハードウェアを指す:i)コンピュータソフトウェア及び/又はハードウェアプロセスのパフォーマンス及び/又は挙動を監視及び/又は測定すること;ii)エラーの診断を可能にする情報を生成する又は診断すること;及びiii)トレース情報を可能にする情報を書き込む又は生成すること。「計測する(to instrument)」は、ソースコード及び/又はバイナリコードにおける命令を包含することを意味し、そのコードは上記のもののうち何れかを実行し、かつ、データそのもの又はデータ処理の結果を報告する。インストルメンテーションの非限定的な具体例は、コードトレーシング、デバッギング、パフォーマンスカウンタ、及び、イベントログを含む。
ブロック506において、インストルメンテーションモジュール500は、リンクにより識別されるロケーションに、ソフトウェアインストルメンテーションを挿入してもよい。ソフトウェアインストルメンテーションは、例えば、ユニフォームリソース識別子(Uniform Resource Identifier:URI)、URIからのデータを要求する及び/又はURIへデータを提供する命令を含んでもよく、その命令はそのリンクロケーションにおけるベーシックブロックを識別する。ソフトウェアインストルメンテーションは、デバッグ情報に関する出力、及び/又は、コンパイルされたソフトウェアプログラムの実行中の出力であってリンクロケーションにおけるベーシックブロックを識別するために使用される出力、そのようなベーシックブロックに対する入力及びその出力、そのようなベーシックブロックのデータタイプ又はデータタイプ構造などを含んでもよい。
完了ブロック508において、インストルメンテーションモジュール500は、それを引き起こしたプロセスを終了及び/又は復帰する。
以下、本開示による実施形態の具体例を示す:
(具体例1)
コンピュータプロセッサにより使用されるメモリ分析モジュールを有し、ソフトウェアプログラムのデバッグを含む処理を実行する装置であって:
前記ソフトウェアからコンパイルされるコンパイルされたソフトウェアプログラム及びデバッグ情報を取得し;
前記コンパイルされたソフトウェアプログラムにおけるメモリ破損の識別を受信し;
前記コンパイルされたソフトウェアプログラムのベーシックブロックのリストを有するランタイムプログラム制御フロートレースを取得し;
保存命令のセットを識別するために、前記ベーシックブロックのリストを分解し又は分解を引き起こし;
前記保存命令のセットのうちの保存命令及びメモリ破損のデータタイプ又はデータタイプ構造を前記デバッグ情報において識別し;
前記メモリ破損のデータタイプ及びデータタイプ構造を有する保存命令候補を判別し、前記保存命令候補を前記ソフトウェアプログラムの一部分に結び付ける少なくとも1つのリンクを取得し;及び
前記保存命令候補及び前記リンクを返す;
ことを特徴とする装置。
(具体例2)
前記デバッグ情報が前記ソフトウェアプログラムのコンパイル中に準備され、前記デバッグ情報は、前記ベーシックブロックのリストにおけるベーシックブロックの定義、前記ベーシックブロックのデータタイプ又はデータタイプ構造、及び、前記ベーシックブロックの命令アドレスを前記ソフトウェアプログラムの一部分にマッピングするリンクを有する
ことを特徴とする具体例1に記載の装置。
(具体例3)
保存命令のセットを識別するために、前記ベーシックブロックのリストを分解し又は分解を引き起こすことが、コード分解モジュールとともに行われ、前記メモリ分析モジュールは前記メモリ破損のレジスタを含むクラッシュログを受信し、前記メモリ分析モジュールは、前記メモリ破損から、前記ランタイムプログラム制御フロートレースにおいて前記コード分解モジュールにより逆探知を行い又は逆探知を引き起こし、前記メモリ破損のレジスタにロードし且つ前記レジスタのデータタイプ又はデータタイプ構造を有する少なくとも1つの保存命令を、前記保存命令のセットの中で識別し、前記少なくとも1つの保存命令を、前記保存命令候補として識別する
ことを特徴とする具体例1に記載の装置。
(具体例4)
前記保存命令候補及び前記リンクを返すことが、前記保存命令候補及び前記リンクをユーザーのために表示することを含む
ことを特徴とする具体例1に記載の装置。
(具体例5)
前記保存命令候補及び前記リンクを返すことが、前記保存命令候補及び前記リンクを、インストルメンテーションモジュールに渡すことを含み、前記インストルメンテーションモジュールは、将来のデバッグ情報における保存命令候補を識別するために前記ソフトウェアプログラムを計測する
ことを特徴とする具体例1に記載の装置。
(具体例6)
前記ランタイムプログラム制御フロートレースは、前記コンパイルされたソフトウェアプログラムの実行であって前記メモリ破損をもたらす実行の際に、プロセッサトレースモジュールから取得される
ことを特徴とする具体例1に記載の装置。
(具体例7)
前記プロセッサトレースモジュールはハードウェアに基づくものである
ことを特徴とする具体例6に記載の装置。
(具体例8)
前記コンパイルされたソフトウェアプログラムの実行は複数の中央処理ユニットによりなされ、前記ランタイムプログラム制御フロートレースは前記複数の中央処理ユニットからのデータを含む
ことを特徴とする具体例6に記載の装置。
(具体例9)
前記ベーシックブロックのリストのうちの各ベーシックブロックは、前記ソフトウェア命令への入口以外の進入分岐を有しておらず且つ前記ソフトウェア命令の出口以外の進出分岐を有していないソフトウェア命令を有し、前記ベーシックブロックは前記ランタイムプログラム制御フロートレースにおけるノードである
ことを特徴とする具体例1ないし具体例8のうちの何れか一項に記載の装置。
(具体例10)
前記保存命令が、前記コンピュータのメモリロケーションに対する値、ベクトル、マトリクス又は変数を記録する
ことを特徴とする具体例1ないし具体例8のうちの何れか一項に記載の装置。
(具体例11)
プロセッサ及びメモリを有するコンピューティングデバイスにおいて、ソフトウェアプログラムをデバッグする方法であって:
前記ソフトウェアからコンパイルされるコンパイルされたソフトウェアプログラム及びデバッグ情報を取得するステップ;
前記コンパイルされたソフトウェアプログラムにおけるメモリ破損の識別を受信するステップ;
前記コンパイルされたソフトウェアプログラムのベーシックブロックのリストを有するランタイムプログラム制御フロートレースを取得するステップ;
保存命令のセットを識別するために、前記ベーシックブロックのリストを分解し又は分解を引き起こすステップ;
前記保存命令のセットのうちの保存命令及びメモリ破損のデータタイプ又はデータタイプ構造を前記デバッグ情報において識別するステップ;
前記メモリ破損のデータタイプ及びデータタイプ構造を有する保存命令候補を判別し、前記保存命令候補を前記ソフトウェアプログラムの一部分に結び付ける少なくとも1つのリンクを取得するステップ;及び
前記保存命令候補及び前記リンクを返すステップ;
を有することを特徴とする方法。
(具体例12)
前記デバッグ情報が前記ソフトウェアプログラムのコンパイル中に準備され、前記デバッグ情報は、前記ベーシックブロックのリストにおけるベーシックブロックの定義、前記ベーシックブロックのデータタイプ又はデータタイプ構造、及び、前記ベーシックブロックの命令アドレスを前記ソフトウェアプログラムの一部分にマッピングするリンクを有する
ことを特徴とする具体例11に記載の方法。
(具体例13)
前記メモリ破損の入力レジスタを含むクラッシュログを受信し、前記メモリ破損から、前記ランタイムプログラム制御フロートレースにおいて前記コード分解モジュールにより逆探知を行い又は逆探知を引き起こし、前記メモリ破損のレジスタにロードし且つ前記レジスタのデータタイプ又はデータタイプ構造を有する少なくとも1つの保存命令を、前記保存命令のセットの中で識別し、前記少なくとも1つの保存命令を、前記保存命令候補として識別するステップ
を更に有することを特徴とする具体例11に記載の方法。
(具体例14)
前記保存命令候補及び前記リンクを返すことが、前記保存命令候補及び前記リンクをユーザーのために表示することを含む
ことを特徴とする具体例11に記載の方法。
(具体例15)
前記保存命令候補及び前記リンクを返すことが、将来のデバッグ情報における保存命令候補を識別するために前記ソフトウェアプログラムを計測することを含む
ことを特徴とする具体例11に記載の方法。
(具体例16)
前記コンパイルされたソフトウェアプログラムの実行であって前記メモリ破損をもたらす実行の際に、プロセッサトレースモジュールから前記ランタイムプログラム制御フロートレースを取得するステップ
を更に有することを特徴とする具体例11に記載の方法。
(具体例17)
前記プロセッサトレースモジュールはハードウェアに基づくものである
ことを特徴とする具体例16に記載の方法。
(具体例18)
前記コンパイルされたソフトウェアプログラムの実行は複数の中央処理ユニットによりなされ、前記ランタイムプログラム制御フロートレースは前記複数の中央処理ユニットからのデータを含む
ことを特徴とする具体例16に記載の方法。
(具体例19)
前記ベーシックブロックのリストのうちの各ベーシックブロックは、前記ソフトウェア命令への入口以外の進入分岐を有しておらず且つ前記ソフトウェア命令の出口以外の進出分岐を有していないソフトウェア命令を含み、前記ベーシックブロックは前記ランタイムプログラム制御フロートレースにおけるノードである
ことを特徴とする具体例11ないし具体例18のうちの何れか一項に記載の方法。
(具体例20)
前記保存命令が、前記コンピュータのメモリロケーションに対する値、ベクトル、マトリクス又は変数を記録する
ことを特徴とする具体例11ないし具体例18のうちの何れか一項に記載の方法。
(具体例21)
ソフトウェアプログラムのデバッグを含む処理を実行する装置であって:
前記ソフトウェアからコンパイルされるコンパイルされたソフトウェアプログラム及びデバッグ情報を取得する手段;
前記コンパイルされたソフトウェアプログラムにおけるメモリ破損の識別を受信する手段;
前記コンパイルされたソフトウェアプログラムのベーシックブロックのリストを有するランタイムプログラム制御フロートレースを取得する手段;
保存命令のセットを識別するために、前記ベーシックブロックのリストを分解し又は分解を引き起こす手段;
前記保存命令のセットのうちの保存命令及びメモリ破損のデータタイプ又はデータタイプ構造を前記デバッグ情報において識別する手段;
前記メモリ破損のデータタイプ及びデータタイプ構造を有する保存命令候補を判別し、前記保存命令候補を前記ソフトウェアプログラムの一部分に結び付ける少なくとも1つのリンクを取得する手段;及び
前記保存命令候補及び前記リンクを返す手段;
を有することを特徴とする装置。
(具体例22)
前記ソフトウェアプログラムのコンパイルから前記デバッグ情報を取得する手段を更に有し、前記デバッグ情報は、前記ベーシックブロックのリストにおけるベーシックブロックの定義、前記ベーシックブロックのデータタイプ又はデータタイプ構造、及び、前記ベーシックブロックの命令アドレスを前記ソフトウェアプログラムの一部分にマッピングするリンクを有する
ことを特徴とする具体例22に記載の装置。
(具体例23)
保存命令のセットを識別するために、前記ベーシックブロックのリストを分解し又は分解を引き起こす手段が、コード分解モジュールを有し、及び、前記メモリ破損のレジスタを含むクラッシュログを受信する手段を有し、前記メモリ破損から、前記ランタイムプログラム制御フロートレースにおいて前記コード分解モジュールにより逆探知を行い又は逆探知を引き起こし、前記メモリ破損のレジスタにロードし且つ前記レジスタのデータタイプ又はデータタイプ構造を有する少なくとも1つの保存命令を、前記保存命令のセットの中で識別する手段と、前記少なくとも1つの保存命令を、前記保存命令候補として識別する手段とを更に有する
ことを特徴とする具体例21に記載の装置。
(具体例24)
前記保存命令候補及び前記リンクを返す手段が、前記保存命令候補及び前記リンクをユーザーのために表示する手段を有する
ことを特徴とする具体例21に記載の装置。
(具体例25)
前記保存命令候補及び前記リンクを返す手段が、将来のデバッグ情報における保存命令候補を識別するために前記ソフトウェアプログラムを計測する手段を有する
ことを特徴とする具体例21に記載の装置。
(具体例26)
前記コンパイルされたソフトウェアプログラムの実行であって前記メモリ破損をもたらす実行の際に、ランタイムプログラム制御フロートレースを決定するプロセッサトレースモジュール手段
を更に有することを特徴とする具体例21に記載の装置。
(具体例27)
前記プロセッサトレースモジュール手段はハードウェアに基づくものである
ことを特徴とする具体例26に記載の装置。
(具体例28)
前記コンパイルされたソフトウェアプログラムの実行は複数の中央処理ユニットによりなされ、前記ランタイムプログラム制御フロートレースは前記複数の中央処理ユニットからのデータを含む
ことを特徴とする具体例26に記載の装置。
(具体例29)
前記ベーシックブロックのリストのうちの各ベーシックブロックは、前記ソフトウェア命令への入口以外の進入分岐を有しておらず且つ前記ソフトウェア命令の出口以外の進出分岐を有していないソフトウェア命令を有し、前記ベーシックブロックは前記ランタイムプログラム制御フロートレースにおけるノードである
ことを特徴とする具体例21ないし具体例28のうちの何れか一項に記載の装置。
(具体例30)
前記保存命令が、前記コンピュータのメモリロケーションに対する値、ベクトル、マトリクス又は変数を記録する
ことを特徴とする具体例21ないし具体例28のうちの何れか一項に記載の装置。
(具体例31)
命令を有する1つ以上のコンピュータ読み取り可能な媒体であって、前記コンピューティングデバイスの1つ以上のプロセッサによる前記命令の実行に応答して、前記命令は、ソフトウェアプログラムのデバッグをコンピューティングデバイスに実行させ、前記ソフトウェアプログラムをデバッグすることは:
前記ソフトウェアからコンパイルされるコンパイルされたソフトウェアプログラム及びデバッグ情報を取得し;
前記コンパイルされたソフトウェアプログラムにおけるメモリ破損の識別を受信し;
前記コンパイルされたソフトウェアプログラムのベーシックブロックのリストを有するランタイムプログラム制御フロートレースを取得し;
保存命令のセットを識別するために、前記ベーシックブロックのリストを分解し又は分解を引き起こし;
前記保存命令のセットのうちの保存命令及びメモリ破損のデータタイプ又はデータタイプ構造を前記デバッグ情報において識別し;
前記メモリ破損のデータタイプ及びデータタイプ構造を有する保存命令候補を判別し、前記保存命令候補を前記ソフトウェアプログラムの一部分に結び付ける少なくとも1つのリンクを取得し;及び
前記保存命令候補及び前記リンクを返す;
ことを含むことを特徴とするコンピュータ読み取り可能な媒体。
(具体例32)
前記デバッグ情報が前記ソフトウェアプログラムのコンパイル中に準備され、前記デバッグ情報は、前記ベーシックブロックのリストにおけるベーシックブロックの定義、前記ベーシックブロックのデータタイプ又はデータタイプ構造、及び、前記ベーシックブロックの命令アドレスを前記ソフトウェアプログラムの一部分にマッピングするリンクを有する
ことを特徴とする具体例31に記載のコンピュータ読み取り可能な媒体。
(具体例33)
デバッグソフトウェアプログラムは、保存命令のセットを識別するために、前記ベーシックブロックのリストをコード分解モジュールとともに分解し又は分解を引き起こし、前記メモリ破損のレジスタを含むクラッシュログを受信し、前記メモリ破損から、前記ランタイムプログラム制御フロートレースにおいて前記コード分解モジュールにより逆探知を行い又は逆探知を引き起こし、前記メモリ破損のレジスタにロードし且つ前記レジスタのデータタイプ又はデータタイプ構造を有する少なくとも1つの保存命令を、前記保存命令のセットの中で識別し、前記少なくとも1つの保存命令を、前記保存命令候補として識別することを含む
ことを特徴とする具体例33に記載のコンピュータ読み取り可能な媒体。
(具体例34)
前記保存命令候補及び前記リンクを返すことが、前記保存命令候補及び前記リンクをユーザーのために表示することを含む
ことを特徴とする具体例31に記載のコンピュータ読み取り可能な媒体。
(具体例35)
前記保存命令候補及び前記リンクを返すことが、将来のデバッグ情報における保存命令候補を識別するために、前記ソフトウェアプログラムを、インストルメンテーションモジュールにより計測する又は計測を引き起こすことを含む
ことを特徴とする具体例31に記載のコンピュータ読み取り可能な媒体。
(具体例36)
ソフトウェアプログラムをデバッグすることが、前記コンパイルされたソフトウェアプログラムの実行であって前記メモリ破損をもたらす実行の際に、プロセッサトレースモジュールから前記ランタイムプログラム制御フロートレースを取得することを含む
ことを特徴とする具体例31に記載のコンピュータ読み取り可能な媒体。
(具体例37)
前記プロセッサトレースモジュールはハードウェアに基づくものである
ことを特徴とする具体例36に記載のコンピュータ読み取り可能な媒体。
(具体例38)
前記コンパイルされたソフトウェアプログラムの実行は複数の中央処理ユニットによりなされ、前記ランタイムプログラム制御フロートレースは前記複数の中央処理ユニットからのデータを含む
ことを特徴とする具体例36に記載のコンピュータ読み取り可能な媒体。
(具体例39)
前記ベーシックブロックのリストのうちの各ベーシックブロックは、前記ソフトウェア命令への入口以外の進入分岐を有しておらず且つ前記ソフトウェア命令の出口以外の進出分岐を有していないソフトウェア命令を有し、前記ベーシックブロックは前記ランタイムプログラム制御フロートレースにおけるノードである
ことを特徴とする具体例31ないし具体例38のうちの何れか一項に記載のコンピュータ読み取り可能な媒体。
(具体例40)
前記保存命令が、前記コンピュータのメモリロケーションに対する値、ベクトル、マトリクス又は変数を記録する
ことを特徴とする具体例31ないし具体例38のうちの何れか一項に記載のコンピュータ読み取り可能な媒体。

Claims (26)

  1. コンピュータプロセッサにより使用されるメモリ分析モジュールを有し、ソフトウェアプログラムのデバッグを含む処理を実行する装置であって:
    前記ソフトウェアプログラムからコンパイルされるコンパイルされたソフトウェアプログラム及びデバッグ情報を取得し;
    前記コンパイルされたソフトウェアプログラムにおけるメモリ破損別し
    前記コンパイルされたソフトウェアプログラムのベーシックブロックのリストを有するランタイムプログラム制御フロートレースを取得し;
    保存命令のセットを識別するために、前記ベーシックブロックのリストを分解し又は分解を引き起こし;
    前記保存命令のセットのうちの保存命令で使用されるデータタイプ又は構と前記メモリ破損で使用されるデータのタイプ又は構造とを前記デバッグ情報に基づいて識別し;
    前記メモリ破損で使用されるデータタイプ又は構造と同じタイプ又は構造使用する保存命令候補を判別し、前記保存命令候補を前記ソフトウェアプログラムの一部分に結び付ける少なくとも1つのリンクを取得し;及び
    前記保存命令候補及び前記リンクを返す;
    ことを特徴とする装置。
  2. 前記デバッグ情報が前記ソフトウェアプログラムのコンパイル中に準備され、前記デバッグ情報は、前記ベーシックブロックのリストにおけるベーシックブロックの定義、前記ベーシックブロックで使用されるデータタイプ又は構造、及び、前記ベーシックブロックの命令アドレスを前記ソフトウェアプログラムの一部分にマッピングするリンクを有する
    ことを特徴とする請求項1に記載の装置。
  3. 保存命令のセットを識別するために、前記ベーシックブロックのリストを分解し又は分解を引き起こすことが、コード分解モジュールとともに行われ、前記メモリ分析モジュールは前記メモリ破損で使用されるレジスタを少なくとも示すクラッシュログを受信し、前記メモリ分析モジュールは、前記メモリ破損から、前記ランタイムプログラム制御フロートレースにおいて前記コード分解モジュールにより逆探知を行い又は逆探知を引き起こし、前記メモリ破損で使用されるレジスタにロードし且つ前記レジスタで使用されるデータタイプ又は構と同じデータ又はタイプを使用する少なくとも1つの保存命令を、前記保存命令のセットの中で識別し、前記少なくとも1つの保存命令を、前記保存命令候補として識別する
    ことを特徴とする請求項1に記載の装置。
  4. 前記保存命令候補及び前記リンクを返すことが、前記保存命令候補及び前記リンクをユーザーのために表示することを含む
    ことを特徴とする請求項1に記載の装置。
  5. 前記保存命令候補及び前記リンクを返すことが、前記保存命令候補及び前記リンクを、インストルメンテーションモジュールに渡すことを含み、前記インストルメンテーションモジュールは、将来のデバッグ情報における保存命令候補を識別するために前記ソフトウェアプログラムを計測する
    ことを特徴とする請求項1に記載の装置。
  6. 前記ランタイムプログラム制御フロートレースは、前記コンパイルされたソフトウェアプログラムの実行であって前記メモリ破損をもたらす実行の際に、プロセッサトレースモジュールから取得される
    ことを特徴とする請求項1に記載の装置。
  7. 前記プロセッサトレースモジュールはハードウェアに基づくものである
    ことを特徴とする請求項6に記載の装置。
  8. 前記コンパイルされたソフトウェアプログラムの実行は複数の中央処理ユニットによりなされ、前記ランタイムプログラム制御フロートレースは前記複数の中央処理ユニットからのデータを含む
    ことを特徴とする請求項6に記載の装置。
  9. 前記ベーシックブロックのリストのうちの各ベーシックブロックは、前記ランタイムプログラム制御フロートレースにおけるノードであり、前記保存命令は、コンピュータにおいてメモリロケーションに対する値、ベクトル、マトリクス又は変数を記録する
    ことを特徴とする請求項1ないし8のうちの何れか一項に記載の装置。
  10. プロセッサ及びメモリを有するコンピューティングデバイスにおいて、ソフトウェアプログラムをデバッグする方法であって:
    前記ソフトウェアプログラムからコンパイルされるコンパイルされたソフトウェアプログラム及びデバッグ情報を取得するステップ;
    前記コンパイルされたソフトウェアプログラムにおけるメモリ破損別するステップ;
    前記コンパイルされたソフトウェアプログラムのベーシックブロックのリストを有するランタイムプログラム制御フロートレースを取得するステップ;
    保存命令のセットを識別するために、前記ベーシックブロックのリストを分解し又は分解を引き起こすステップ;
    前記保存命令のセットのうちの保存命令で使用されるデータタイプ又は構と前記メモリ破損で使用されるデータのタイプ又は構造とを前記デバッグ情報に基づいて識別するステップ;
    前記メモリ破損で使用されるデータタイプ又は構造と同じタイプ又は構造を使用する保存命令候補を判別し、前記保存命令候補を前記ソフトウェアプログラムの一部分に結び付ける少なくとも1つのリンクを取得するステップ;及び
    前記保存命令候補及び前記リンクを返すステップ;
    を有することを特徴とする方法。
  11. 前記デバッグ情報が前記ソフトウェアプログラムのコンパイル中に準備され、前記デバッグ情報は、前記ベーシックブロックのリストにおけるベーシックブロックの定義、前記ベーシックブロックで使用されるデータタイプ又は構造、及び、前記ベーシックブロックの命令アドレスを前記ソフトウェアプログラムの一部分にマッピングするリンクを有する
    ことを特徴とする請求項10に記載の方法。
  12. 前記メモリ破損で使用されるレジスタを少なくとも示すクラッシュログを受信し、前記メモリ破損から、前記ランタイムプログラム制御フロートレースにおいてコード分解モジュールにより逆探知を行い又は逆探知を引き起こし、前記メモリ破損で使用されるレジスタにロードし且つ前記レジスタで使用されるデータタイプ又は構と同じタイプ又は構造を使用する少なくとも1つの保存命令を、前記保存命令のセットの中で識別し、前記少なくとも1つの保存命令を、前記保存命令候補として識別するステップ
    を更に有することを特徴とする請求項10に記載の方法。
  13. 前記保存命令候補及び前記リンクを返すことが、前記保存命令候補及び前記リンクをユーザーのために表示することを含む
    ことを特徴とする請求項10に記載の方法。
  14. 前記保存命令候補及び前記リンクを返すことが、将来のデバッグ情報における保存命令候補を識別するために前記ソフトウェアプログラムを計測することを含む
    ことを特徴とする請求項10に記載の方法。
  15. 前記コンパイルされたソフトウェアプログラムの実行であって前記メモリ破損をもたらす実行の際に、プロセッサトレースモジュールから前記ランタイムプログラム制御フロートレースを取得するステップ
    を更に有することを特徴とする請求項10に記載の方法。
  16. 前記プロセッサトレースモジュールはハードウェアに基づくものであり、前記コンパイルされたソフトウェアプログラムの実行は複数の中央処理ユニットによりなされ、前記ランタイムプログラム制御フロートレースは前記複数の中央処理ユニットからのデータを含み、前記ベーシックブロックのリストのうちの各ベーシックブロックは、前記ランタイムプログラム制御フロートレースにおけるノードであり、前記保存命令が、コンピュータにおいてメモリロケーションに対する値、ベクトル、マトリクス又は変数を記録する
    ことを特徴とする請求項15に記載の方法。
  17. ソフトウェアプログラムのデバッグを含む処理を実行する装置であって:
    前記ソフトウェアプログラムからコンパイルされるコンパイルされたソフトウェアプログラム及びデバッグ情報を取得する手段;
    前記コンパイルされたソフトウェアプログラムにおけるメモリ破損別する手段;
    前記コンパイルされたソフトウェアプログラムのベーシックブロックのリストを有するランタイムプログラム制御フロートレースを取得する手段;
    保存命令のセットを識別するために、前記ベーシックブロックのリストを分解し又は分解を引き起こす手段;
    前記保存命令のセットのうちの保存命令で使用されるデータタイプ又は構と前記メモリ破損で使用されるデータのタイプ又は構造とを前記デバッグ情報に基づいて識別する手段;
    前記メモリ破損で使用されるデータタイプ又は構造と同じタイプ又は構造を使用する保存命令候補を判別し、前記保存命令候補を前記ソフトウェアプログラムの一部分に結び付ける少なくとも1つのリンクを取得する手段;及び
    前記保存命令候補及び前記リンクを返す手段;
    を有することを特徴とする装置。
  18. 前記ソフトウェアプログラムのコンパイルから前記デバッグ情報を取得する手段を更に有し、前記デバッグ情報は、前記ベーシックブロックのリストにおけるベーシックブロックの定義、前記ベーシックブロックで使用されるデータタイプ又は構造、及び、前記ベーシックブロックの命令アドレスを前記ソフトウェアプログラムの一部分にマッピングするリンクを有する
    ことを特徴とする請求項17に記載の装置。
  19. 保存命令のセットを識別するために、前記ベーシックブロックのリストを分解し又は分解を引き起こす手段が、コード分解モジュールを有し、前記メモリ破損で使用されるレジスタを少なくとも示すクラッシュログを受信する手段を有し、前記メモリ破損から、前記ランタイムプログラム制御フロートレースにおいてコード分解モジュールにより逆探知を行い又は逆探知を引き起こし、前記メモリ破損で使用されるレジスタにロードし且つ前記レジスタで使用されるデータタイプ又は構と同じデータ又は構造を使用する少なくとも1つの保存命令を、前記保存命令のセットの中で識別する手段と、前記少なくとも1つの保存命令を、前記保存命令候補として識別する手段とを更に有する
    ことを特徴とする請求項17に記載の装置。
  20. 前記保存命令候補及び前記リンクを返す手段が、前記保存命令候補及び前記リンクをユーザーのために表示する手段を有する
    ことを特徴とする請求項17に記載の装置。
  21. 前記保存命令候補及び前記リンクを返す手段が、将来のデバッグ情報における保存命令候補を識別するために前記ソフトウェアプログラムを計測する手段を有する
    ことを特徴とする請求項17に記載の装置。
  22. 前記コンパイルされたソフトウェアプログラムの実行であって前記メモリ破損をもたらす実行の際に、ランタイムプログラム制御フロートレースを決定するプロセッサトレースモジュール手段
    を更に有することを特徴とする請求項17に記載の装置。
  23. 前記プロセッサトレースモジュール手段はハードウェアに基づくものであり、前記コンパイルされたソフトウェアプログラムの実行は複数の中央処理ユニットによりなされ、前記ランタイムプログラム制御フロートレースは前記複数の中央処理ユニットからのデータを含む
    ことを特徴とする請求項22に記載の装置。
  24. 前記ベーシックブロックのリストのうちの各ベーシックブロックは、前記ランタイムプログラム制御フロートレースにおけるノードであり、前記保存命令は、コンピュータにおいてメモリロケーションに対する値、ベクトル、マトリクス又は変数を記録する
    ことを特徴とする請求項17ないし23のうちの何れか一項に記載の装置。
  25. 命令を有するコンピュータプログラムであって、前記命令は、ソフトウェアプログラムのデバッグをコンピューティングデバイスに実行させ、前記ソフトウェアプログラムをデバッグすることは:
    前記ソフトウェアプログラムからコンパイルされるコンパイルされたソフトウェアプログラム及びデバッグ情報を取得し;
    前記コンパイルされたソフトウェアプログラムにおけるメモリ破損別し
    前記コンパイルされたソフトウェアプログラムのベーシックブロックのリストを有するランタイムプログラム制御フロートレースを取得し;
    保存命令のセットを識別するために、前記ベーシックブロックのリストを分解し又は分解を引き起こし;
    前記保存命令のセットのうちの保存命令で使用されるデータタイプ又は構と前記メモリ破損で使用されるデータのタイプ又は構造とを前記デバッグ情報に基づいて識別し;
    前記メモリ破損で使用されるデータタイプ又は構造と同じタイプ又は構造を使用する保存命令候補を判別し、前記保存命令候補を前記ソフトウェアプログラムの一部分に結び付ける少なくとも1つのリンクを取得し;及び
    前記保存命令候補及び前記リンクを返す;
    ことを含むことを特徴とするコンピュータプログラム。
  26. 請求項25に記載のコンピュータプログラムを記憶する記憶媒体。
JP2016225010A 2015-12-21 2016-11-18 データフロー分析のための装置、方法、コンピュータプログラム及び記憶媒体 Expired - Fee Related JP6363152B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/977,071 2015-12-21
US14/977,071 US10013335B2 (en) 2015-12-21 2015-12-21 Data flow analysis in processor trace logs using compiler-type information method and apparatus

Publications (2)

Publication Number Publication Date
JP2017117442A JP2017117442A (ja) 2017-06-29
JP6363152B2 true JP6363152B2 (ja) 2018-07-25

Family

ID=59064917

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016225010A Expired - Fee Related JP6363152B2 (ja) 2015-12-21 2016-11-18 データフロー分析のための装置、方法、コンピュータプログラム及び記憶媒体

Country Status (4)

Country Link
US (1) US10013335B2 (ja)
JP (1) JP6363152B2 (ja)
CN (2) CN107025167B (ja)
WO (1) WO2017112127A1 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10013335B2 (en) * 2015-12-21 2018-07-03 Intel Corporation Data flow analysis in processor trace logs using compiler-type information method and apparatus
US10372902B2 (en) * 2017-03-06 2019-08-06 Intel Corporation Control flow integrity
US10540261B2 (en) * 2017-04-07 2020-01-21 International Business Machines Corporation Problem diagnosis technique of memory corruption based on regular expression generated during application compiling
CN107678948B (zh) * 2017-09-18 2021-09-07 茂佳科技(广东)有限公司 测试用例生成方法、终端及存储介质
US10990506B2 (en) 2019-04-11 2021-04-27 Microsoft Technology Licensing, Llc Cross-thread memory indexing in time-travel debugging traces
US11068378B2 (en) * 2019-04-11 2021-07-20 Microsoft Technology Licensing, Llc Memory value exposure in time-travel debugging traces
CN112579169B (zh) * 2019-09-27 2024-04-09 阿里巴巴集团控股有限公司 处理器追踪流的生成方法及装置
CN113672499B (zh) * 2021-07-20 2024-11-12 杭州中天微系统有限公司 追踪可执行程序中的目标变量的方法和系统
US20220092179A1 (en) * 2021-12-02 2022-03-24 Intel Corporation Detecting data oriented attacks using hardware-based data flow anomaly detection
CN115016967B (zh) * 2022-06-01 2025-10-10 东莞市步步高教育软件有限公司 应用崩溃处理方法、终端、服务器、电子设备和存储介质

Family Cites Families (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6292035A (ja) 1985-10-17 1987-04-27 Omron Tateisi Electronics Co プログラムデバツグ装置
JPH02235150A (ja) 1989-03-09 1990-09-18 Nec Corp 情報処理装置
US5615357A (en) * 1994-12-29 1997-03-25 Sun Microsystems, Inc. System and method for verifying processor performance
JPH08297597A (ja) 1995-04-26 1996-11-12 Mitsubishi Electric Corp エミュレータ
US5907709A (en) * 1996-02-08 1999-05-25 Inprise Corporation Development system with methods for detecting invalid use and management of resources and memory at runtime
US5848264A (en) * 1996-10-25 1998-12-08 S3 Incorporated Debug and video queue for multi-processor chip
US6353924B1 (en) * 1999-02-08 2002-03-05 Incert Software Corporation Method for back tracing program execution
US6769116B1 (en) 1999-10-21 2004-07-27 Oracle International Corporation Diagnostic technique for debugging memory corruption
US6718485B1 (en) * 1999-11-16 2004-04-06 Parasoft Corporation Software emulating hardware for analyzing memory references of a computer program
US6748584B1 (en) * 1999-12-29 2004-06-08 Veritas Operating Corporation Method for determining the degree to which changed code has been exercised
US6543028B1 (en) * 2000-03-31 2003-04-01 Intel Corporation Silent data corruption prevention due to instruction corruption by soft errors
US7313734B2 (en) * 2002-01-14 2007-12-25 International Business Machines Corporation Method and system for instruction tracing with enhanced interrupt avoidance
US7231634B2 (en) * 2002-09-17 2007-06-12 Sun Microsystems, Inc. Method for determining scope and cause of memory corruption
US8407798B1 (en) * 2002-10-01 2013-03-26 Skybox Secutiry Inc. Method for simulation aided security event management
US7409602B2 (en) * 2003-11-12 2008-08-05 Lsi Corporation Methodology for debugging RTL simulations of processor based system on chip
US7739374B1 (en) * 2003-12-30 2010-06-15 Sap Ag System and method for configuring tracing and logging functions
JP2006215931A (ja) * 2005-02-07 2006-08-17 Yasuo Oka インターネット個人メモリサーバ
US8266608B2 (en) * 2005-02-18 2012-09-11 Green Hills Software, Inc. Post-compile instrumentation of object code for generating execution trace data
US7711914B2 (en) 2005-06-28 2010-05-04 Hewlett-Packard Development Company, L.P. Debugging using virtual watchpoints
US7526758B2 (en) * 2005-06-30 2009-04-28 Microsoft Corporation Execution failure investigation using static analysis
US7761657B2 (en) * 2006-07-10 2010-07-20 Hitachi, Ltd. Storage control system, control method for storage control system, port selector, and controller
US8813055B2 (en) * 2006-11-08 2014-08-19 Oracle America, Inc. Method and apparatus for associating user-specified data with events in a data space profiler
US8032875B2 (en) * 2006-11-28 2011-10-04 Oracle America, Inc. Method and apparatus for computing user-specified cost metrics in a data space profiler
US8762951B1 (en) * 2007-03-21 2014-06-24 Oracle America, Inc. Apparatus and method for profiling system events in a fine grain multi-threaded multi-core processor
US8261242B2 (en) * 2008-06-09 2012-09-04 International Business Machines Corporation Assisting debug memory tracing using an instruction array that tracks the addresses of instructions modifying user specified objects
CN101526921B (zh) * 2008-12-31 2014-07-30 飞天诚信科技股份有限公司 写入数据的方法及装置
US20110016455A1 (en) * 2009-07-20 2011-01-20 Glenn Perry Power Profiling for Embedded System Design
US8490060B2 (en) 2009-09-23 2013-07-16 International Business Machines Corporation Tracing memory updates and accesses for debugging computer programs
US8621337B1 (en) 2010-09-30 2013-12-31 Juniper Networks, Inc. Detecting memory corruption
US8732681B2 (en) * 2011-05-16 2014-05-20 Texas Instruments Incorporated Stack analysis for post mortem analysis
CN102857358A (zh) * 2011-06-29 2013-01-02 环旭电子股份有限公司 可修复固件的客户端设备及其固件修复方法
US20130055033A1 (en) * 2011-08-22 2013-02-28 International Business Machines Corporation Hardware-assisted program trace collection with selectable call-signature capture
US8756582B2 (en) * 2011-08-22 2014-06-17 International Business Machines Corporation Tracking a programs calling context using a hybrid code signature
CN103064752B (zh) * 2011-09-27 2016-12-21 北京奇虎科技有限公司 一种文件修复方法及装置
US9880842B2 (en) * 2013-03-15 2018-01-30 Intel Corporation Using control flow data structures to direct and track instruction execution
US9672298B2 (en) 2014-05-01 2017-06-06 Oracle International Corporation Precise excecution of versioned store instructions
US9619313B2 (en) * 2015-06-19 2017-04-11 Intel Corporation Memory write protection for memory corruption detection architectures
US10013335B2 (en) * 2015-12-21 2018-07-03 Intel Corporation Data flow analysis in processor trace logs using compiler-type information method and apparatus
US11461025B2 (en) * 2020-11-05 2022-10-04 Macronix International Co., Ltd. Data retention in memory devices

Also Published As

Publication number Publication date
CN113704097A (zh) 2021-11-26
JP2017117442A (ja) 2017-06-29
US10013335B2 (en) 2018-07-03
CN107025167A (zh) 2017-08-08
WO2017112127A1 (en) 2017-06-29
CN107025167B (zh) 2021-09-03
US20170177463A1 (en) 2017-06-22

Similar Documents

Publication Publication Date Title
JP6363152B2 (ja) データフロー分析のための装置、方法、コンピュータプログラム及び記憶媒体
Moran et al. Automatically discovering, reporting and reproducing android application crashes
US10380350B1 (en) Efficient and comprehensive source code fuzzing
US20110078666A1 (en) System and Method for Reproducing Device Program Execution
Dean et al. Perfcompass: Online performance anomaly fault localization and inference in infrastructure-as-a-service clouds
US10296442B2 (en) Distributed time-travel trace recording and replay
US9355003B2 (en) Capturing trace information using annotated trace output
US20120246625A1 (en) System and method of software execution path identification
Tan et al. Visual, log-based causal tracing for performance debugging of mapreduce systems
US20120131559A1 (en) Automatic Program Partition For Targeted Replay
US10725889B2 (en) Testing multi-threaded applications
US9841960B2 (en) Dynamic provision of debuggable program code
US11074153B2 (en) Collecting application state in a runtime environment for reversible debugging
US20120036501A1 (en) Method and System for Capturing System and User Events Using Hardware Trace Devices
US20140215483A1 (en) Resource-usage totalizing method, and resource-usage totalizing device
CN112463574B (zh) 软件测试方法、装置、系统、设备和存储介质
US11113182B2 (en) Reversible debugging in a runtime environment
US10956304B2 (en) Dynamic diagnostic code instrumentation over a historic program execution
US10552280B2 (en) In-band monitor in system management mode context for improved cloud platform availability
US20130332907A1 (en) Exception handling for a distributed runtime
US9442818B1 (en) System and method for dynamic data collection
Fedorova et al. Performance comprehension at WiredTiger
US10481993B1 (en) Dynamic diagnostic data generation
Kasikci et al. Failure sketches: A better way to debug
Getman et al. Combined approach to solving problems in binary code analysis

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180117

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180206

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180501

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180529

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180627

R150 Certificate of patent or registration of utility model

Ref document number: 6363152

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees