JP2014503902A - 異なるコンパイラステージからのデバッグ情報の融合 - Google Patents

異なるコンパイラステージからのデバッグ情報の融合 Download PDF

Info

Publication number
JP2014503902A
JP2014503902A JP2013544853A JP2013544853A JP2014503902A JP 2014503902 A JP2014503902 A JP 2014503902A JP 2013544853 A JP2013544853 A JP 2013544853A JP 2013544853 A JP2013544853 A JP 2013544853A JP 2014503902 A JP2014503902 A JP 2014503902A
Authority
JP
Japan
Prior art keywords
code
symbol
instruction
debug information
stage
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.)
Pending
Application number
JP2013544853A
Other languages
English (en)
Inventor
クマール アガルワル アミット
ポール ドルシェル トラヴィス
メイビー ポール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2014503902A publication Critical patent/JP2014503902A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本発明は、異なるコンパイラステージからのデバッグ情報を融合する方法、システム、およびコンピュータプログラム製品に及ぶ。本発明の実施形態は、コード生成プロセスでの複数の異なるコンパイルステージからの本発明デバッグ情報を、単一のデバッグ情報のセットとして融合する。単一のデバッグ情報のセットは、最初のコンパイルステージに入力される命令およびシンボル(例えば、ソースコード)と、最後のコンパイルステージから出力される命令およびシンボル(例えば、機械コード)との間を直接的にマッピングする。

Description

本発明は、異なるコンパイラステージからのデバッグ情報の融合に関する。
コンピュータシステムおよび関連技術は、社会の多くの面に影響を及ぼす。実際に、情報を処理するコンピュータシステムの能力は、私たちが生活し、働く方法を一変させた。現在、コンピュータシステムは一般に、コンピュータシステムの出現の前には手作業で実施されたタスク(例えば、ワードプロセッシング、スケジューリング、会計など)のホストを実施する。より最近では、コンピュータシステムが互いに、および他の電子装置に結合され、コンピュータシステムおよび他の電子装置がそれを介して電子データを転送することができるワイヤードコンピュータネットワークとワイヤレスコンピュータネットワークの両方が形成されている。したがって、多くのコンピューティングタスクの実施が、いくつかの異なるコンピュータシステムおよび/またはいくつかの異なるコンピューティング環境にわたって分散する。
コンピューティングタスクを実施するソフトウェアアプリケーションを開発するために、開発者は通常、ソフトウェアアプリケーションの所望の機能を表現する(例えば、C++、Visual Basicなどの)ソースコードを書く。次いで、ソースコードを実行可能コードにコンパイルする(または実行時に交互に解釈する)ことができる。ソースコードコンパイル中に、コンパイラは、ソースコード命令を、コンピュータシステム上で直接的に実行可能な機械語命令(例えば、x86命令)に変換する。実行可能コードは、コンピュータシステム上で実行され、所望の機能が実施される。多くのコンパイラは、所望の機能からの逸脱を引き起こすソースプログラム内の欠陥の位置を開発者が特定し、修正するのを助けることができるデバッグ情報も出力する。
いくつかの環境では、ソースコードを実行可能コードにコンパイルするために単一ステージコンパイラが使用される。例えば、C++コンパイラは、C++ソースコードを、パーソナルコンピュータのプロセッサ上で実行することのできる実行可能コードに直接的にコンパイルすることができる。別の環境では、ソースコードを実行可能コードにコンパイルするためにマルチステージコンパイラが使用される。マルチステージコンパイラは、いくつかの異なるコンパイルステージを含むことができる。各コンパイルステージは、何らかの翻訳、変換などを実施して、受け取ったソースコードの(例えば、特定のプロセッサを対象とする)機械語命令へのコンパイルに進むことができる。
より特定の環境では、中央処理装置(「CPU」)と並列にグラフィカルプロセッサユニット(「GPU」)を利用して所望の機能を実施するようにData Parallel C++(「DPC++」)ソースコードが開発される。すなわち、あるソースコードがCPUを対象とするように書かれ、別のソースコードがGPUを対象とするように書かれる。GPUを対象とするソースコードでは、Data Parallel C++(「DPC++」)ソースコードをHigh Level Shader Language(「HLSL」)バイトコード(これはGPU上で実行可能である)にコンパイルするのにマルチステージコンパイラが使用される。第1のコンパイルステージは、DPC++ソースコードをHLSLソースコードに翻訳する。次いで、第2のコンパイルステージは、HLSLソースコードを、GPU上で実行されるHLSLバイトコードに変換する。マルチステージコンパイラの使用により、DPC++開発者が、HLSLの知識を持たずにGPU用のコードを開発することが可能となる。
マルチステージコンパイラが使用されるとき、各コンパイルステージは通常、入力フォーマットの命令およびシンボルと、出力フォーマットの命令およびシンボルとの間のデバッグ情報マッピングを出力する。例えば、第1のコンパイルステージは、ソースコード命令およびシンボルと、中間コード(例えば、第2のソースコード、中間言語コードなど)命令およびシンボルとの間のデバッグ情報マッピングを出力することができる。第2のコンパイルステージは、中間コード命令およびシンボルと、実行可能コード命令およびシンボルとの間のデバッグ情報マッピングを出力することができる。前の例に戻ると、第1のコンパイルステージは、DPC++ソースコード命令およびシンボルと、HLSLソースコード命令およびシンボルとの間のデバッグ情報マッピングを出力することができる。第2のコンパイルステージは、HLSLソースコード命令およびシンボルと、HLSLバイトコード命令およびシンボルとの間のデバッグ情報マッピングを出力することができる。
したがって、マルチステージコンパイラを使用してコンパイルされるアプリケーションをデバッグするために、開発者は、各コンパイルステージからのデバッグ情報のセットを利用して、ソースコード命令またはシンボルを実行可能コード命令またはシンボルにマッピングしなければならない。複数のデバッグ情報のセットを処理することはリソース集約的であり、コンパイルステージの数が増加するにつれてリソース使用量が増大する。
本発明は、異なるコンパイラステージからのデバッグ情報を融合する方法、システム、およびコンピュータプログラム製品に及ぶ。第1のコンパイルステージが第1のコードにアクセスする。第1のコードは、第1のフォーマットの第1の命令および第1のシンボルを含む。第1のコードが第2のコードに翻訳される。第1のコードを翻訳することは、第1の命令および第1のシンボルを、第2のフォーマットの対応する第2の命令および第2のシンボルに変換することを含む。第2のフォーマットは第1のフォーマットとは異なる。第1のコードを翻訳することはまた、第1のデバッグ情報を生成することをも含む。第1のデバッグ情報は、第1の命令内の各命令を、第2の命令内の対応する命令にマッピングし、第1のシンボル内の各シンボルを、第2のシンボル内の対応するシンボルにマッピングする。
第2のコンパイルステージが第2のコードにアクセスする。第2のコードが第3のコードに翻訳される。第2のコードを翻訳することは、第2の命令および第2のシンボルを、第3のフォーマットの対応する第3の命令および第3のシンボルに変換することを含む。第3のフォーマットは、第1のフォーマットおよび第2のフォーマットとは異なる。第2のコードを翻訳することはまた、第2のデバッグ情報を生成することをも含む。第2のデバッグ情報は、第2の命令内の各命令を、第3の命令内の対応する命令にマッピングし、第2のシンボル内の各シンボルを、第3のシンボル内の対応するシンボルにマッピングする。
第1のデバッグ情報および第2のデバッグ情報は、統合された第3のデバッグ情報に融合される。統合された第3のデバッグ情報は、第1の命令を第3の命令に直接的にマッピングし、第1のシンボルを第3のシンボルに直接的にマッピングする。第1の命令および第1のシンボルのそれぞれについて、第1の命令または第1のシンボルに対応する第2の命令または第2のシンボルが、第1のデバッグ情報内から識別される。識別された第2の命令または第2のシンボルに対応する第3の命令または第3のシンボルが、第2のデバッグ情報内から識別される。第1の命令または第1のシンボルが、識別された対応する第3の命令または第3のシンボルに直接的にマッピングされる。第1の命令または第1のシンボルの、識別された対応する第3の命令または第3のシンボルへのマッピングが、統合された第3のデバッグ情報に格納される。
この概要は、以下の詳細な説明でさらに説明する概念の抜粋を簡略化した形で紹介するために与えたものである。この概要は、特許請求される主題の主要な特徴または不可欠な特徴を特定するためのものではなく、特許請求される主題の範囲を決定する助けとして使用するためのものでもない。
以下の説明で本発明の追加の特徴および利点を述べ、本発明の追加の特徴および利点は、部分的には、説明から明らかとなり、または本発明の実施によって知ることができる。本発明の特徴および利点は、添付の特許請求の範囲で具体的に指摘される機器および組合せによって実現し、得ることができる。本発明のこれらおよび他の特徴は、以下の説明および添付の特許請求の範囲からより完全に明らかとなり、または以下で述べる本発明の実施によって知ることができる。
本発明の上述および他の利点および特徴を得ることのできる方法を説明するために、上記で簡潔に説明した本発明のより具体的な説明を、添付の図面に図示する本発明の特定の実施形態を参照することによって行う。こうした図面は本発明の典型的な実施形態を示すに過ぎず、したがってその範囲の限定とみなすべきではないことを理解して、添付の図面の使用を通じて本発明をさらに具体的かつ詳細に説明する。
異なるコンパイラステージからのデバッグ情報を融合することを容易にする例示的コンピュータアーキテクチャを示す図である。 異なるコンパイラステージからのデバッグ情報を融合することを容易にする別の例示的コンピュータアーキテクチャを示す図である。 異なるコンパイラステージからのデバッグ情報を融合する例示的方法の流れ図である。 異なるコンパイラステージからのデバッグ情報を融合する例示的方法の流れ図である。 異なるコンパイラステージからのデバッグ情報を融合する例示的方法の流れ図である。
本発明は、異なるコンパイラステージからのデバッグ情報を融合する方法、システム、およびコンピュータプログラム製品に及ぶ。第1のコンパイルステージが第1のコードにアクセスする。第1のコードは、第1のフォーマットの第1の命令および第1のシンボルを含む。第1のコードが第2のコードに翻訳される。第1のコードを翻訳することは、第1の命令および第1のシンボルを、第2のフォーマットの対応する第2の命令および第2のシンボルに変換することを含む。第2のフォーマットは第1のフォーマットとは異なる。第1のコードを翻訳することはまた、第1のデバッグ情報を生成することをも含む。第1のデバッグ情報は、第1の命令内の各命令を、第2の命令内の対応する命令にマッピングし、第1のシンボル内の各シンボルを、第2のシンボル内の対応するシンボルにマッピングする。
第2のコンパイルステージが第2のコードにアクセスする。第2のコードが第3のコードに翻訳される。第2のコードを翻訳することは、第2の命令および第2のシンボルを、第3のフォーマットの対応する第3の命令および第3のシンボルに変換することを含む。第3のフォーマットは、第1のフォーマットおよび第2のフォーマットとは異なる。第2のコードを翻訳することはまた、第2のデバッグ情報を生成することをも含む。第2のデバッグ情報は、第2の命令内の各命令を、第3の命令内の対応する命令にマッピングし、第2のシンボル内の各シンボルを、第3のシンボル内の対応するシンボルにマッピングする。
第1のデバッグ情報および第2のデバッグ情報は、統合された第3のデバッグ情報に融合される。統合された第3のデバッグ情報は、第1の命令を第3の命令に直接的にマッピングし、第1のシンボルを第3のシンボルに直接的にマッピングする。第1の命令および第1のシンボルのそれぞれについて、第1の命令または第1のシンボルに対応する第2の命令または第2のシンボルが、第1のデバッグ情報内から識別される。識別された第2の命令または第2のシンボルに対応する第3の命令または第3のシンボルが、第2のデバッグ情報内から識別される。第1の命令または第1のシンボルが、識別された対応する第3の命令または第3のシンボルに直接的にマッピングされる。第1の命令または第1のシンボルの、識別された対応する第3の命令または第3のシンボルへのマッピングが、統合された第3のデバッグ情報に格納される。
以下でより詳細に論じるように、本発明の実施形態は、例えば1つまたは複数のプロセッサやシステムメモリなどのコンピュータハードウェアを含む専用または汎用コンピュータを備え、または使用する。本発明の範囲内の実施形態はまた、コンピュータ実行可能命令および/またはデータ構造を搬送または格納する物理的コンピュータ可読媒体および他のコンピュータ可読媒体をも含むことができる。そのようなコンピュータ可読媒体は、汎用または専用コンピュータシステムでアクセスすることのできる任意の入手可能な媒体でよい。コンピュータ実行可能命令を格納するコンピュータ可読媒体は、コンピュータ記憶媒体(装置)である。コンピュータ実行可能命令を搬送するコンピュータ可読媒体は、伝送媒体である。したがって、限定ではなく例として、本発明の実施形態は、コンピュータ記憶媒体(装置)および伝送媒体という少なくとも2つのはっきり異なる種類のコンピュータ可読媒体を備えることができる。
コンピュータ記憶媒体(装置)は、RAM、ROM、EEPROM、CD−ROM、DVD、または他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気記憶装置、フラッシュドライブ、サムドライブ、あるいはコンピュータ実行可能命令またはデータ構造の形態の所望のプログラムコード手段を格納するのに使用することができ、汎用または専用コンピュータでアクセスすることのできる任意の他の媒体を含む。
「ネットワーク」は、コンピュータシステムおよび/またはモジュールおよび/または他の電子装置間での電子データの移送を可能にする1つまたは複数のデータリンクと定義される。ネットワークまたは別の通信接続(ハードワイヤード、ワイヤレス、あるいはハードワイヤードまたはワイヤレスの組合せ)を介して情報がコンピュータに転送または提供されるとき、コンピュータは適切に、接続を伝送媒体とみなす。伝送媒体は、コンピュータ実行可能命令またはデータ構造の形態の所望のプログラムコード手段を搬送するのに使用することができ、汎用または専用コンピュータでアクセスすることのできるネットワークおよび/またはデータリンクを含むことができる。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
さらに、様々なコンピュータシステム構成要素への到達時に、コンピュータ実行可能命令またはデータ構造の形態のプログラムコード手段を伝送手段からコンピュータ記憶媒体(装置)に(または逆も同様である)自動的に転送することができる。例えば、ネットワークまたはデータリンクを介して受信されたコンピュータ実行可能命令またはデータ構造をネットワークインターフェースモジュール(例えば「NIC」)内のRAMにバッファリングし、次いでコンピュータシステムRAMおよび/またはコンピュータシステムのより揮発性の低いコンピュータ記憶媒体(装置)に最終的に転送することができる。したがって、伝送媒体も利用する(さらには、主に利用する)コンピュータシステム構成要素にコンピュータ記憶媒体(装置)を含めることができることを理解されたい。
コンピュータ実行可能命令は、例えば、プロセッサで実行されたときに、汎用コンピュータ、専用コンピュータ、または専用処理装置に一定の機能または機能のグループを実施させる命令およびデータを含む。コンピュータ実行可能命令は、例えば、バイナリ、アセンブリ言語などの中間フォーマット命令、さらにはソースコードでよい。構造的特徴および/または方法的動作に特有の言い回しで主題を説明したが、添付の特許請求の範囲で定義される主題は、前述の特徴または上述の動作に必ずしも限定されないことを理解されたい。むしろ、記載の特徴および動作は、特許請求の範囲を実施する例示的形態として開示される。
パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースの、またはプログラム可能な消費者向け電子機器、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、携帯電話、PDA、ページャ、ルータ、交換機などを含む多くのタイプのコンピュータシステム構成を有するネットワークコンピューティング環境で本発明を実施できることを当業者は理解されよう。ネットワークを通じて(ハードワイヤードデータリンク、ワイヤレスデータリンク、あるいはハードワイヤードデータリンクとワイヤレスデータリンクの組合せによって)リンクされるローカルコンピュータシステムとリモートコンピュータシステムがどちらもタスクを実施する分散システム環境で本発明を実施することもできる。分散システム環境では、ローカルメモリ記憶装置とリモートメモリ記憶装置のどちらにもプログラムモジュールを配置することができる。
いくつかの実施形態では、中央演算処理装置(「CPU」)と並列にグラフィカルプロセッサユニット(「GPU」)を利用して所望の機能を実施するようにソースコードが開発される。すなわち、あるソースコードがCPUを対象とするように書かれ、別のソースコードがGPUを対象とするように書かれる。GPUを対象とするソースコードについて、マルチステージコンパイラを使用して、ソースコードをGPU上で実行可能なコードにコンパイルすることができる。
一般に、本発明の実施形態は、コード生成プロセスでの複数の異なるコンパイルステージからのデバッグ情報を単一のデバッグ情報のセットに融合する。単一のデバッグ情報のセットは、最初のコンパイルステージに入力される命令およびシンボル(例えば、ソースコード)と、最後のコンパイルステージから出力される命令およびシンボル(例えば、機械コード)との間を直接的にマッピングする。
まず図2を参照すると、図2は、異なるコンパイラステージからのデバッグ情報を融合することを容易にする例示的コンピュータアーキテクチャ200を示す。コンピュータアーキテクチャ200は、マルチステージコンパイラ201およびデバッグ情報マッパ206を含む。マルチステージコンパイラ201は、コンパイラステージ202、203、204などを含む複数のコンパイラステージを含む。省略記号205は、マルチステートコンパイラ201が1つまたは複数の追加のコンパイラステージを含むことができることを表す。図示する構成要素のそれぞれは、例えばローカルエリアネットワーク(「LAN」)、広域ネットワーク(「WAN」)、さらにはインターネットなどのネットワークを介して互いに接続することができる(またはネットワークの一部である)。したがって、図示する構成要素のそれぞれ、ならびに任意の他の接続されたコンピュータシステムおよびその構成要素は、ネットワークを介してメッセージ関連データおよび交換メッセージ関連データ(例えば、インターネットプロトコル(「IP」)データグラム、および伝送制御プロトコル(「TCP」)、ハイパーテキスト転送プロトコル(「HTTP」)、簡易メール転送プロトコル(「SMTP」)などのIPデータグラムを利用する他の上位層プロトコル)を作成することができる。
(ほぼ任意のプログラミング言語の)ソースコード211を入力としてマルチステージコンパイラ201に与えることができる。コンパイラステージ202はソースコード211を受信することができる。コンパイラステージ202は、ソースコード211の翻訳、変換、コンパイルなどの1つまたは複数を実施して、中間コード212を生成することができる。翻訳、変換、コンパイルなどの一部として、コンパイルステージ202はデバッグ情報221も生成することができる。デバッグ情報221は、ソースコード211内の命令およびシンボルと、中間コード212内の命令およびシンボルとの間をマッピングする。
コンパイラステージ203は中間コード212を受信することができる。コンパイラステージ203は、中間コード212の翻訳、変換、コンパイルなどの1つまたは複数を実施して、中間コード212を生成することができる。翻訳、変換、コンパイルなどの一部として、コンパイルステージ203はデバッグ情報222も生成することができる。デバッグ情報222は、中間コード212内の命令およびシンボルと、中間コード213内の命令およびシンボルとをマッピングする。
コンパイラステージ204は中間コード213を受信することができる。コンパイラステージ204は、中間コード213の翻訳、変換、コンパイルなどの1つまたは複数を実施して、別のコードを生成することができる(例えば、実行可能コード214または次のコンパイラステージに渡される別の中間コード)。翻訳、変換、コンパイルなどの一部として、コンパイルステージ204はデバッグ情報223も生成することができる。デバッグ情報223は、中間コード213内の命令およびシンボルと、別のコード内の命令およびシンボルとの間をマッピングする。別のコードが実行可能コード214であるとき、デバッグ情報223は、中間コード213内の命令およびシンボルと、実行可能コード214内の命令およびシンボルとの間をマッピングする。
追加のコンパイラステージがマルチステージコンパイラ201内に含まれるとき、追加のコンパイラステージは、例えばデバッグ情報224などのデバッグ情報も生成することができる。
デバッグ情報マッパ206は、マルチステージコンパイラ201のコンパイル状態で生成されたデバッグ情報を受信することができる。例えば、デバッグ情報マッパ206は、デバッグ情報221、222、223、224(存在するとき)などを受信することができる。デバッグ情報マッパ206は、221、222、223、224(存在するとき)などを統合されたデバッグ情報226に融合することができる。統合されたデバッグ情報226は、ソースコード211命令と実行可能コード214命令との間を直接的にマッピングし、ソースコード211シンボルと実行可能コード214シンボルとの間を直接的にマッピングする。したがって、統合されたデバッグ情報226を使用するとき、ソースコード211をより効率的にデバッグすることができる。
次に図1を参照すると、図1は、異なるコンパイラステージからのデバッグ情報を融合することを容易にする例示的コンピュータアーキテクチャ100を示す。図示するように、コンピュータアーキテクチャ100は、マルチステージコンパイラ101およびデバッグ情報マッパ106を含む。マルチステージコンパイラ101は、コンパイラステージ102およびコンパイラステージ103をさらに含む。一般には、マルチステージコンパイラ101は、入力ソースコードを受信し、入力ソースコードを実行可能コードにコンパイルすることができる。コンパイル中に、コンパイラステージ102および103のそれぞれは、デバッグ情報を生成することができる。
図3A−Cに、異なるコンパイラステージからのデバッグ情報を融合する例示的方法300の流れ図を示す。コンピュータアーキテクチャ100の構成要素およびデータに関して方法300を説明する。
第1のコンパイルステージでは、方法300は、第1のコードにアクセスする動作を含み、第1のコードは、第1のフォーマットの第1の命令および第1のシンボルを含む(動作301)。例えば、コンパイラステージ102はソースコード111にアクセスすることができる。ソースコード111は、第1のフォーマット(例えば、Data Parallel C++(「DPC++」))の第1の命令および第1のシンボルを含むことができる。
方法300は、第1のコードを第2のコードに翻訳する動作を含む(動作302)。例えば、コンパイラステージ102は、ソースコード111を中間コード112に翻訳することができる。動作302は、第1の命令および第1のシンボルを、第2のフォーマットの対応する第2の命令および第2のシンボルに変換する動作を含み、第2のフォーマットは第1のフォーマットとは異なる(動作303)。例えば、コンパイラステージ102は、ソースコード111内の命令およびシンボルを、中間コード112内の対応する命令およびシンボルに変換することができる。中間コード112のフォーマット(例えば、High Level Shader Language(「HLSL」)ソースコード)は、ソースコード111の構成(例えば、DPC++)とは異なる可能性がある。
動作302は、第1のデバッグ情報を生成する動作を含み、第1のデバッグ情報は、第1の命令内の各命令を、第2の命令内の対応する命令にマッピングし、第1のシンボル内の各シンボルを、第2のシンボル内の対応するシンボルにマッピングする(動作304)。例えば、コンパイラステージ102はデバッグ情報121を生成することができる。デバッグ情報121は、ソースコード111内の各命令を、中間コード112内の対応する命令にマッピングする。例えば、命令マッピング131は、ソースコード111の行7を中間コード112の行12にマッピングする。デバッグ情報121はまた、ソースコード111内の各シンボルを中間コード112内の対応するシンボルにマッピングする。例えば、シンボルマッピング132は、ソースコード111のシンボルxを、中間コード112のシンボル「var_5」にマッピングする。
第2のコンパイルステージでは、方法300は、第2のコードにアクセスする動作を含む(動作305)。例えば、コンパイラステージ103は中間コード112(例えば、HLSLソースコード)にアクセスすることができる。
方法300は、第2のコードを第3のコードに翻訳する動作を含む(動作306)。例えば、コンパイラステージ103は、中間コード112を実行可能コード113に翻訳することができる。動作306は、第2の命令および第2のシンボルを、第3のフォーマットの対応する第3の命令および第3のシンボルに変換する動作を含み、第3のフォーマットは第1のフォーマットおよび第2のフォーマットとは異なる(動作307)。例えば、コンパイラステージ103は、中間コード112内の命令およびシンボルを、実行可能コード113内の対応する命令およびシンボルに変換することができる。実行可能コード113のフォーマット(例えば、HLSLバイトコード)は、ソースコード111(例えば、DPC++)および中間コード112(例えば、HLSLソースコード)のフォーマットとは異なる可能性がある。
動作306は、第2のデバッグ情報を生成する動作を含み、第2のデバッグ情報は、第2の命令内の各命令を、第3の命令内の対応する命令にマッピングし、第2のシンボル内の各シンボルを、第3のシンボル内の対応するシンボルにマッピングする(動作308)。例えば、コンパイラステージ103は、統合されたデバッグ情報122を生成することができる。統合されたデバッグ情報122は、中間コード112内の各命令を、実行可能コード113内の対応する命令にマッピングする。例えば、命令マッピング133は、中間コード112の行12を実行可能コード113の命令id 7にマッピングする。統合されたデバッグ情報123はまた、中間コード112内の各シンボルを、実行可能コード113内の対応するシンボルにマッピングする。例えば、シンボルマッピング134は、中間コード112のシンボルvar_5を実行可能コード113のレジスタ@r3にマッピングする。
方法300は、第1のデバッグ情報および第2のデバッグ情報を第3のデバッグ情報に融合する動作を含み、第3のデバッグ情報は、第1の命令を第3の命令に直接的にマッピングし、第1のシンボルを第3のシンボルに直接的にマッピングする(動作309)。例えば、デバッグマッパ106は、デバッグ情報121およびデバッグ情報122を統合されたデバッグ情報123に融合することができる。統合されたデバッグ情報123は、ソースコード111内の命令と、実行可能コード113内の命令との間を直接的にマッピングする。統合されたデバッグ情報123はまた、ソースコード111内のシンボルと、実行可能コード113内のシンボルとの間で直接的にマッピングする。
第1の命令および第1のシンボルのそれぞれについて、動作309は、第1のデバッグ情報内から、第1の命令または第1のシンボルに対応する第2の命令または第2のシンボルを識別する動作を含む(動作310)。例えば、デバッグマッパ106は、中間コード112の行12がソースコード111の行7に対応することを識別することができる。同様に、デバッグマッパ106は、中間コード112のシンボルvar_5がソースコード111のシンボルxに対応することを識別することができる。
第1の命令および第1のシンボルのそれぞれについて、動作309は、第2のデバッグ情報内から、識別した第2の命令または第2のシンボルに対応する第3の命令または第3のシンボルを識別する動作を含む(動作311)。例えば、デバッグマッパ106は、実行可能コード113の命令id 7が中間コード112の行12に対応することを識別することができる。同様に、デバッグマッパ106は、実行可能コード133のレジスタ@r3が中間コード112のシンボルvar_5に対応することを識別することができる。
第1の命令および第1のシンボルのそれぞれについて、動作309は、第1の命令または第1のシンボルを、識別した対応する第3の命令または第3のシンボルに直接的にマッピングする動作を含む(動作312)。例えば、デバッグマッパ106は、命令マッピング136を構築して、ソースコード111の行7と実行可能コード113の命令id 7との間を直接的にマッピングすることができる。同様に、デバッグマッパは、シンボルマッピング137を構築して、ソースコード111のシンボルxと、実行可能コード113のレジスタ@r3との間を直接的にマッピングすることができる。第1の命令および第1のシンボルのそれぞれについて、動作309は、第1の命令または第1のシンボルの、識別した対応する第3の命令または第3のシンボルへのマッピングを第3のデバッグ情報に格納する動作を含む(動作313)。例えば、デバッグマッパ106は、命令マッピング136およびシンボルマッピング137を、統合されたデバッグ情報123に格納することができる。
次いで、統合されたデバッグ情報123をデバッグモジュール(図示せず)で使用して、ソースコード111のデバッギングを支援することができる。
より具体的に、本発明のいくつかの実施形態は、DPC++コードを、画像処理装置(「GPU」)で実行されるHLSLバイトコードにコンパイルすることに関する。第1のコンパイルステージが、すべての各DPC++ forallコールサイトに対応する平坦化されたHLSLソースレベル計算シェーダ(flattened HLSL source level computer shader)を生成する。第2のコンパイルステージが、HLSLコンパイラを起動して、生成したHLSLソースレベル計算シェーダに対応するHLSLバイトコードを生成する。その後で、forallコールサイトで各カーネル呼出しについて生成したバイトコードが、コンパイラが生成したPE(portable executable)実行可能ファイルのテキストセグメント内に格納される。
各コンパイルステージで、シンボリックマッピングのセットが生成される。シンボリックマッピングは、そのコンパイルステージの一部として実施された翻訳を表す。第1のコンパイルステージは、DPC++ソースシンボルと、生成したHLSLソースコードシンボルとの間のマッピングを定義する。第2のコンパイルステージは、HLSLソースコードシンボルと、最終的なHLSLバイトコード内の対応する位置(バイトコードアドレス、レジスタ)との間のマッピングを定義する。
デバッグ効率およびメモリフットプリントの削減を促進するために、以下の理由で、DPC++ソースシンボルと最終的なHLSLバイトコードとの間の直接的マッピングを与える単一の記録のセットにシンボリックデバッグ情報を融合することができる。単一のマッピングのセットは、コンパイラが、(PE実行可能ファイルに格納される)HLSLバイトコードブロブから中間HLSL−バイトコードシンボリックマッピング情報(intermediate HLSL to bytecode symbolic mapping information)を取り除くことを可能にし、したがって実行可能ファイルのメモリフットプリントが削減される。さらに、単一のシンボリックデバッグ情報記録のセットは、(DPC++ソースからHLSLソースへのマッピングと、その後に続くHLSLソース−バイトコードマッピングの2レベルマッピング、およびその逆の代わりに)ソースシンボルおよび位置とHLSLバイトコードアドレスおよびレジスタとの間の直接的マッピングを可能にすることにより、GPUデバッガでのDPC++シンボル分解の単純化と促進をどちらも行う。
例えば、第1のコンパイラステージを使用して、例示的DPC++コード
void int_add_kernel(...)
{
...
c=a+b; // 行11
}
を、例示的HLSLソースコード
void hlsl_int_add_kernel(...)
{
...
var_2=var_1+var_0; // 行24
}
に翻訳することができる。
その後で、第2のコンパイラステージが、例示的HLSLソースコードを例示的HLSLバイトコードにコンパイルする。
@r2=@r1+@r0 // 命令索引5
コンパイラバックエンドでHLSLソースコードを生成するとき、コードタプルおよびシンボルからHLSLソース位置およびシンボル名へのマッピングを、例えばプログラムデータベース(PDB)記録などの何らかの内部データ構造に格納することができる。例えば、第1のコンパイラステージは、DPC++ソースコード命令およびシンボルをHLSLソースコード命令およびシンボルにマッピングする第1の内部データ構造を生成することができる。
DPC++ "line 11"->HLSL "line 24"
DPC++ symbol"a"->HLSL symbol "var_0"
DPC++ symbol"b"->HLSL symbol "var l"
DPC++ symbol"c"->HLSL symbol "var_2"
その後で、第2のコンパイラステージは、HLSLソースコード命令およびシンボルをHLSLバイトコードにマッピングする第2の内部データ構造を生成することができる。
HLSL "line 24"->Bytecode "instruction id 5"
HLSL symbol"var_0"->Bytecode register "@r0"
HLSL symbol"var_l"->Bytecode register "@r1"
HLSL symbol"var_2"->Bytecode register "@r2"
リーダ構成要素を実装して、第2の内部データ構造を読み取り、HLSLソース位置およびシンボルをバイトコードアドレスおよびレジスタに分解することができる。次に、第1の内部データ構造を使用して、DPC++ソース位置およびシンボルとHLSLバイトコードアドレスおよびレジスタ名との間の直接的マッピングを生成する。直接的マッピングを、例えばPDB記録の形などで第3の内部データ構造に格納することができる。
DPC++ "line 11"->Bytecode "instruction id 5"
DPC++ symbol"a"->Bytecode register"@r0"
DPC++ symbol"b"->Bytecode register"@r1"
DPC++ symbol"c"->Bytecode register"@r2"
本発明の精神または不可欠な特徴から逸脱することなく他の特定の形態で本発明を実施することができる。記載の実施形態は、すべての点で、限定的なものではなく、例示的なものとみなされるべきである。したがって、本発明の範囲は、上記の説明ではなく添付の特許請求の範囲によって示される。特許請求の範囲と等価な意味および範囲の中にあるすべての変更は、その範囲内に包含されるべきである。

Claims (10)

  1. 1つまたは複数のプロセッサおよびシステムメモリを含むコンピュータシステム上で、異なるコンパイルステージで生成されたデバッグ情報を組み合わせる方法であって、前記コンピュータシステムは、ソースコードを実行可能コードにコンパイルするマルチステージコンパイラも含み、前記マルチステージコンパイラは、少なくとも第1のコンパイルステージおよび第2のコンパイルステージを含む複数のコンパイルステージを有し、前記複数のコンパイルステージにおける各コンパイルステージは、コードフォーマット間で変わり、かつ実行可能コードをソースコードから生成することに進むように構成され、前記方法は、
    第1のデバッグ情報および第2のデバッグ情報を、統合された第3のデバッグ情報に融合する動作であって、
    前記第1のデバッグ情報は、第1のフォーマットの第1のコードを第2の異なるフォーマットの第2のコードに翻訳する前記第1のコンパイルステージで生成され、前記第1のデバッグ情報は、前記第1のコードにおける各命令を、前記第2のコードにおける対応する命令にマッピングし、かつ前記第1のコードにおける各シンボルを、前記第2のコードにおける対応するシンボルにマッピングし、
    前記第2のデバッグ情報が、前記第2のコードを第3の異なるフォーマットの第3のコードに翻訳する前記第2のコンパイルステージで生成され、前記第2のデバッグ情報は、前記第2のコードにおける各命令を、前記第3のコードにおける対応する命令にマッピングし、かつ前記第2のコードにおける各シンボルを、前記第3のコードにおける対応するシンボルにマッピングし、
    前記統合された第3のデバッグ情報は、前記第1の命令を前記第3の命令に直接的にマッピングし、かつ前記第1のシンボルを前記第3のシンボルに直接的にマッピングし、前記第1のデバッグ情報および前記第2のデバッグ情報を融合し、前記第1のデバッグ情報および前記第2のデバッグ情報を融合することは、前記第1のコードにおける各命令およびシンボルのために、
    前記第1のデバッグ情報を使用して、前記第1のコードにおける命令またはシンボルに対応する前記第2のコードにおける命令またはシンボルを識別する動作と、
    前記第2のデバッグ情報を使用して、前記第2のコードにおける前記識別した命令またはシンボルに対応する前記第3のコードにおける命令またはシンボルを識別する動作と、
    前記第1のコードにおける前記命令またはシンボルを前記第3のコードにおける前記識別した対応する命令またはシンボルに直接的にマッピングする動作と、
    前記第1のコードにおける前記命令またはシンボルの、前記第3のコードにおける前記命令またはシンボルへの直接的マッピングを、前記統合された第3のデバッグ情報に格納する動作と
    を含む、融合する動作
    を備えたことを特徴とする方法。
  2. 前記第1のデバッグ情報および前記第2のデバッグ情報を統合された第3のデバッグ情報に融合する前記動作は、Data Parallel C++(DPC++)ソースコードにおける命令位置およびシンボルと、High Level Shader Language(HLSL)ソースコードにおける命令位置およびシンボルとの間でマッピングする第1のデバッグ情報、ならびにHLSLソースコードにおける命令位置およびシンボルと、HLSLバイトコードにおけるアドレスおよびレジスタ名との間でマッピングする第2のデバッグ情報を、前記DPC++ソースコードにおける位置およびシンボルと、前記HLSLバイトコード内のアドレスおよびレジスタ名との間をマッピングする統合された第3のデバッグ情報に融合する動作を含むことを特徴とする請求項1に記載の方法。
  3. 前記第1のコンパイルステージは、Data Parallel C++(DPC++)ソースコードを、High Level Shader Language(HLSL)ソースコードに翻訳するように構成されることを特徴とする請求項1に記載の方法。
  4. 前記第2のコンパイルステージは、High Level Shader Language(HLSL)ソースコードを、HLSLバイトコードに翻訳するように構成されることを特徴とする請求項1に記載の方法。
  5. 前記第1のデバッグ情報、前記第2のデバッグ情報、および前記統合された第3のデバッグ情報が、プログラムデータベース(PDB)レコードとして格納されることを特徴とする請求項1に記載の方法。
  6. 統合された第3のデバッグ情報を使用して、前記第1のコードのデバッギングを支援する動作をさらに含むことを特徴とする請求項1に記載の方法。
  7. コンピュータシステムで使用するコンピュータプログラム製品であって、前記コンピュータシステムは、ソースコードを実行可能コードにコンパイルするマルチステージコンパイラを含み、前記マルチステージコンパイラは、少なくとも第1のコンパイルステージおよび第2のコンパイルステージを含む複数のコンパイルステージを有し、前記複数のコンパイルステージにおける各コンパイルステージは、コードフォーマット間で変わり、かつ実行可能コードをソースコードから生成することに進むように構成され、前記コンピュータプログラム製品は、異なるコンパイルステージで生成されるデバッグ情報を組み合わせる方法を実装し、前記コンピュータプログラム製品は、プロセッサで実行されると前記コンピュータシステムに前記方法を実行させるコンピュータ実行可能命令を格納する1つまたは複数のコンピュータ記憶装置を備え、前記方法は、
    第1のデバッグ情報および第2のデバッグ情報を統合された第3のデバッグ情報に融合するステップであって、
    前記第1のデバッグ情報は、第1のフォーマットの第1のコードを第2の異なるフォーマットの第2のコードに翻訳する前記第1のコンパイルステージで生成され、前記第1のデバッグ情報は、前記第1のコード内の各命令を、前記第2のコード内の対応する命令にマッピングし、かつ前記第1のコード内の各シンボルを、前記第2のコード内の対応するシンボルにマッピングし、
    前記第2のデバッグ情報は、前記第2のコードを第3の異なるフォーマットの第3のコードに翻訳する前記第2のコンパイルステージで生成され、前記第2のデバッグ情報は、前記第2のコード内の各命令を、前記第3のコード内の対応する命令にマッピングし、かつ前記第2のコード内の各シンボルを、前記第3のコード内の対応するシンボルにマッピングし、
    前記統合された第3のデバッグ情報は、前記第1の命令を前記第3の命令に直接的にマッピングし、かつ前記第1のシンボルを前記第3のシンボルに直接的にマッピングし、前記第1のデバッグ情報および前記第2のデバッグ情報を融合し、前記第1のデバッグ情報および前記第2のデバッグ情報を融合することは、前記第1のコードにおける各命令およびシンボルのために、
    前記第1のデバッグ情報を使用して、前記第1のコードにおける命令またはシンボルに対応する前記第2のコードにおける命令またはシンボルを識別する動作と、
    前記第2のデバッグ情報を使用して、前記第2のコードにおける識別した命令またはシンボルに対応する前記第3のコードにおける命令またはシンボルを識別する動作と、
    前記第1のコードにおける前記命令またはシンボルを前記第3のコードにおける識別した対応する命令またはシンボルに直接的にマッピングする動作と、
    前記第1のコードにおける前記命令またはシンボルの、前記第3のコードにおける前記命令またはシンボルへの直接的マッピングを、前記統合された第3のデバッグ情報に格納する動作と
    を含む、融合するステップ
    を含むことを特徴とするコンピュータプログラム製品。
  8. 1つまたは複数のプロセッサおよびシステムメモリを含むコンピュータシステムで、異なるコンパイルステージで生成されたデバッグ情報を組み合わせる方法であって、前記コンピュータシステムは、ソースコードを実行可能コードにコンパイルするマルチステージコンパイラも含み、前記マルチステージコンパイラは、複数のコンパイルステージを有し、前記複数のコンパイルステージにおける各コンパイルステージは、コードフォーマット間で変わり、かつ実行可能コードをソースコードから生成することに進むように構成され、前記方法は、
    第1のコンパイルステージで、
    第1のコードにアクセスする動作であって、前記第1のコードは、第1のフォーマットの第1の命令および第1のシンボルを含む、アクセスする動作と、
    前記第1のコードを第2のコードに翻訳する動作であって、前記翻訳する動作は、
    前記第1の命令および第1のシンボルを、第2のフォーマットの対応する第2の命令および第2のシンボルに変換する動作であって、前記第2のフォーマットは前記第1のフォーマットとは異なる、変換する動作と、
    第1のデバッグ情報を生成する動作であって、前記第1のデバッグ情報は、前記第1の命令における各命令を、前記第2の命令における対応する命令にマッピングし、かつ前記第1のシンボルにおける各シンボルを、前記第2のシンボルにおける対応するシンボルにマッピングする、生成する動作と
    を含む、翻訳する動作と、
    第2のコンパイルステージで、
    前記第2のコードにアクセスする動作と、
    前記第2のコードを第3のコードに翻訳する動作であって、前記翻訳する動作は、
    前記第2の命令および第2のシンボルを、第3のフォーマットの対応する第3の命令および第3のシンボルに変換する動作であって、前記第3のフォーマットは、前記第1のフォーマットおよび前記第2のフォーマットとは異なる、翻訳する動作と、
    第2のデバッグ情報を生成する動作であって、前記第2のデバッグ情報は、前記第2の命令における各命令を、前記第3の命令における対応する命令にマッピングし、かつ前記第2のシンボルにおける各シンボルを、前記第3のシンボルにおける対応するシンボルにマッピングする、生成する動作と
    を含む、翻訳する動作と、
    前記第1のデバッグ情報および前記第2のデバッグ情報を統合された第3のデバッグ情報に融合する動作であって、前記統合された第3のデバッグ情報は、前記第1の命令を前記第3の命令に直接的にマッピングし、かつ前記第1のシンボルを前記第3のシンボルに直接的にマッピングし、前記融合する動作は、前記第1の命令および前記第1のシンボルの各々のために、
    前記第1のデバッグ情報内から、前記第1の命令または第1のシンボルに対応する第2の命令または第2のシンボルを識別する動作と、
    前記第2のデバッグ情報内から、前記識別した第2の命令または第2のシンボルに対応する第3の命令または第3のシンボルを識別する動作と、
    前記第1の命令または第1のシンボルを、前記識別した対応する第3の命令または第3のシンボルに直接的にマッピングする動作と
    前記第1の命令または第1のシンボルの、前記識別した対応する第3の命令または第3のシンボルへのマッピングを、前記統合された第3のデバッグ情報に格納する動作と
    を含む、融合する動作と
    を備えたことを特徴とする方法。
  9. 前記第2の命令および前記第2のシンボルを、第3のフォーマットの対応する第3の命令および第3のシンボルに変換する前記動作は、前記第2の命令および第2のシンボルを、画像処理装置(「GPU」)上で実行可能なコードに変換する動作を含むことを特徴とする請求項8に記載の方法。
  10. 前記第1のデバッグ情報および前記第2のデバッグ情報を前記統合された第3のデバッグ情報として融合する前記動作は、Data Parallel C++(DPC++)ソースコードにおける命令位置およびシンボルと、High Level Shader Language(HLSL)ソースコードにおける命令位置およびシンボルとの間でマッピングする第1のデバッグ情報、ならびにHLSLソースコードにおける命令位置およびシンボルと、HLSLバイトコードにおけるアドレスおよびレジスタ名との間でマッピングする第2のデバッグ情報を、前記DPC++ソースコードにおける位置およびシンボルと、前記HLSLバイトコードにおけるアドレスおよびレジスタとの間でマッピングする第3のデバッグ情報に融合する動作を含むことを特徴とする請求項8に記載の方法。
JP2013544853A 2010-12-17 2011-12-16 異なるコンパイラステージからのデバッグ情報の融合 Pending JP2014503902A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/971,943 US20120159444A1 (en) 2010-12-17 2010-12-17 Fusing debug information from different compiler stages
US12/971,943 2010-12-17
PCT/US2011/065661 WO2012083266A2 (en) 2010-12-17 2011-12-16 Fusing debug information from different compiler stages

Publications (1)

Publication Number Publication Date
JP2014503902A true JP2014503902A (ja) 2014-02-13

Family

ID=46236216

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013544853A Pending JP2014503902A (ja) 2010-12-17 2011-12-16 異なるコンパイラステージからのデバッグ情報の融合

Country Status (8)

Country Link
US (1) US20120159444A1 (ja)
EP (1) EP2652609A4 (ja)
JP (1) JP2014503902A (ja)
KR (1) KR20140001953A (ja)
CN (1) CN102637136B (ja)
CA (1) CA2821308A1 (ja)
HK (1) HK1172408A1 (ja)
WO (1) WO2012083266A2 (ja)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7350194B1 (en) * 2001-09-24 2008-03-25 Oracle Corporation Techniques for debugging computer programs involving multiple computing machines
US10169199B2 (en) 2008-06-10 2019-01-01 Microsoft Technology Licensing, Llc Automatic model-specific debugger extensions
TW201419140A (zh) * 2012-11-06 2014-05-16 Ind Tech Res Inst 可重新配置的指令編碼方法、執行方法及電子裝置
US20130290940A1 (en) * 2012-04-25 2013-10-31 Balaji Palanisamy Symbol-based merging of computer programs
RU2014152808A (ru) * 2012-05-25 2016-07-20 Конинклейке Филипс Н.В. Способ, система и устройство для защиты от обратного инжиниринга и/или вмешательства в программы
JP5891976B2 (ja) * 2012-07-03 2016-03-23 富士通株式会社 コンパイル実行・管理方法、装置、及びプログラム
KR102013582B1 (ko) * 2012-09-07 2019-08-23 삼성전자 주식회사 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법
JP6036089B2 (ja) * 2012-09-25 2016-11-30 日本電気株式会社 データ遷移トレース装置、データ遷移トレース方法、及び、データ遷移トレースプログラム
US8839201B2 (en) * 2012-10-12 2014-09-16 Vmware, Inc. Capturing test data associated with error conditions in software item testing
US8949794B2 (en) 2012-10-12 2015-02-03 Vmware, Inc. Binding a software item to a plain english control name
US9292416B2 (en) 2012-10-12 2016-03-22 Vmware, Inc. Software development kit testing
US10067858B2 (en) 2012-10-12 2018-09-04 Vmware, Inc. Cloud-based software testing
US8839202B2 (en) * 2012-10-12 2014-09-16 Vmware, Inc. Test environment managed within tests
US9292422B2 (en) 2012-10-12 2016-03-22 Vmware, Inc. Scheduled software item testing
US9684587B2 (en) 2012-10-12 2017-06-20 Vmware, Inc. Test creation with execution
US10387294B2 (en) 2012-10-12 2019-08-20 Vmware, Inc. Altering a test
US9069902B2 (en) 2012-10-12 2015-06-30 Vmware, Inc. Software test automation
KR101598819B1 (ko) * 2013-12-02 2016-03-02 한국과학기술연구원 타겟 독립적인 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체
KR101670726B1 (ko) * 2013-12-02 2016-10-31 한국과학기술연구원 중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체
US9235388B2 (en) 2014-02-13 2016-01-12 Red Hat, Inc. Multi-dimensional, multi-configuration compilation phase output visualization technique
US9195567B1 (en) 2014-05-16 2015-11-24 International Business Machines Corporation Debugging data format conversion
US9317266B1 (en) * 2014-11-12 2016-04-19 Bank Of America Corporation Leveraging legacy applications for use with modern applications
US10048960B2 (en) * 2014-12-17 2018-08-14 Semmle Limited Identifying source code used to build executable files
RU2016137176A (ru) * 2016-09-16 2018-03-19 Оракл Интернэйшнл Корпорейшн Связывание преобразованного исходного кода с первоначальным исходным кодом с помощью метаданных
RU2016137177A (ru) 2016-09-16 2018-03-19 Оракл Интернэйшнл Корпорейшн Усовершенствованное преобразование исходного кода языка программирования
US10353802B2 (en) 2016-11-04 2019-07-16 International Business Machines Corporation Debugging a live streaming application
CN107656726A (zh) * 2017-10-10 2018-02-02 北京元比特科技有限责任公司 一种互联网信息及技术共享平台及方法
US11487520B2 (en) * 2017-12-01 2022-11-01 Cotiviti, Inc. Automatically generating reasoning graphs
CN108874396A (zh) * 2018-05-31 2018-11-23 苏州蜗牛数字科技股份有限公司 基于hlsl的多平台多目标语言的交叉编译器及编译方法
US10936771B1 (en) * 2019-10-02 2021-03-02 Microsoft Technology Licensing, Llc Using a common fuse controller hardware design for different applications
CN111091612B (zh) * 2019-10-09 2023-06-02 武汉凌久微电子有限公司 一种抽象目标码架构的着色语言机器码生成方法及装置
CN114556289A (zh) * 2019-11-06 2022-05-27 英特尔公司 用于应用中的向量计算的多阶段自动编译
CN110865815A (zh) * 2019-11-12 2020-03-06 广州泳泳信息科技有限公司 一种shader语言多平台编译发布系统及方法
US20230297491A1 (en) * 2022-03-18 2023-09-21 Red Hat, Inc. Source-level debugging of intermediate code
CN116205783B (zh) * 2023-04-24 2023-08-18 芯瞳半导体技术(山东)有限公司 一种基于gpu着色器代码的调试方法、装置及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03144832A (ja) * 1989-10-31 1991-06-20 Nec Corp プリコンパイラ言語プログラムのシンボリックデバッグ装置
JPH03240837A (ja) * 1990-02-19 1991-10-28 Nec Corp デバッグ情報生成装置
JPH04257033A (ja) * 1990-09-21 1992-09-11 Hewlett Packard Co <Hp> シンボリックデバッグシステム及びその方法
JP2007141173A (ja) * 2005-11-22 2007-06-07 Matsushita Electric Ind Co Ltd コンパイルシステム、デバッグシステムおよびプログラム開発システム

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5845121A (en) * 1995-10-06 1998-12-01 International Business Machines Corporation Expression evaluation in a multi-language debugger
US6091896A (en) * 1995-12-22 2000-07-18 Hewlett-Packard Company Debugging optimized code using data change points
US6760903B1 (en) * 1996-08-27 2004-07-06 Compuware Corporation Coordinated application monitoring in a distributed computing environment
US5857093A (en) * 1996-09-20 1999-01-05 Allen-Bradley Company, Llc Cross-compiled simulation timing backannotation
US6449615B1 (en) * 1998-09-21 2002-09-10 Microsoft Corporation Method and system for maintaining the integrity of links in a computer network
US6785884B1 (en) * 1999-09-29 2004-08-31 Unisys Corporation Symbolic debug interface for register transfer simulator debugger
US6795963B1 (en) * 1999-11-12 2004-09-21 International Business Machines Corporation Method and system for optimizing systems with enhanced debugging information
US6966051B2 (en) * 2001-05-24 2005-11-15 International Business Machines Corporation Automatically generated symbol-based debug script executable by a debug program for software debugging
JP3612294B2 (ja) * 2001-08-06 2005-01-19 松下電器産業株式会社 デバッグ方法およびデバッグ装置
US7284242B2 (en) * 2003-01-06 2007-10-16 Xerox Corporation Program compiler with abstraction composer
US7146604B2 (en) * 2003-01-06 2006-12-05 Xerox Corporation Program operators for composing abstractions
US7299454B2 (en) * 2003-02-26 2007-11-20 Bea Systems, Inc. Method for multi-language debugging
US7634763B2 (en) * 2003-07-15 2009-12-15 Microsoft Corporation Extensible multi-language compilation
US7305376B2 (en) * 2003-10-23 2007-12-04 Microsoft Corporation Multiple language-dependent resources compacted into a single resource file
US7607123B2 (en) * 2004-09-21 2009-10-20 Hewlett-Packard Development Company, L.P. Systems and methods for validating debug information for optimized code
US8819625B2 (en) * 2009-09-03 2014-08-26 International Business Machines Corporation Sharable development environment bookmarks for functional/data flow

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03144832A (ja) * 1989-10-31 1991-06-20 Nec Corp プリコンパイラ言語プログラムのシンボリックデバッグ装置
JPH03240837A (ja) * 1990-02-19 1991-10-28 Nec Corp デバッグ情報生成装置
JPH04257033A (ja) * 1990-09-21 1992-09-11 Hewlett Packard Co <Hp> シンボリックデバッグシステム及びその方法
JP2007141173A (ja) * 2005-11-22 2007-06-07 Matsushita Electric Ind Co Ltd コンパイルシステム、デバッグシステムおよびプログラム開発システム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6015026949; Matt Pietrek: 'Under the Hood' MSJ No.50, 19970818, p.171-183, 株式会社アスキー *

Also Published As

Publication number Publication date
CN102637136B (zh) 2016-06-01
EP2652609A2 (en) 2013-10-23
WO2012083266A2 (en) 2012-06-21
CA2821308A1 (en) 2012-06-21
CN102637136A (zh) 2012-08-15
KR20140001953A (ko) 2014-01-07
US20120159444A1 (en) 2012-06-21
EP2652609A4 (en) 2017-11-22
HK1172408A1 (zh) 2013-04-19
WO2012083266A3 (en) 2013-01-17

Similar Documents

Publication Publication Date Title
JP2014503902A (ja) 異なるコンパイラステージからのデバッグ情報の融合
CN110096338B (zh) 智能合约执行方法、装置、设备及介质
US20130007712A1 (en) Debugging in a multiple address space environment
US8756590B2 (en) Binding data parallel device source code
JP5551939B2 (ja) 任意の標的アーキテクチャに対する並列simdコードを生成する方法、コンピュータ可読媒体、およびシステム
US8997066B2 (en) Emulating pointers
CN104346274B (zh) 程序调试器及一种程序的调试方法
US20120317558A1 (en) Binding executable code at runtime
US20180032420A1 (en) Debugging Tool For A JIT Compiler
CN110058861B (zh) 源码处理方法及装置、存储介质、电子设备
US8539458B2 (en) Transforming addressing alignment during code generation
WO2012067803A2 (en) Map transformation in data parallel code
US8990515B2 (en) Aliasing buffers
US8661421B2 (en) Methods and apparatuses for endian conversion
EP3738028A1 (en) Reduced instructions to generate global variable addresses
US9298426B2 (en) Compiler generation of thunking code
CN117493610A (zh) 基于java实现的GraphQL参数生成方法和系统
CN115292254A (zh) 文件存储方法及装置、介质、电子设备
CN110688110A (zh) 快速生成实体模型的方法以及装置
Clemons A Complete Development Solution for Intelligent Systems
CN105723336A (zh) 构建时解析和类型检查引用
JP2005196436A (ja) プログラム処理プログラム及びプログラム処理プログラムを記録した記録媒体及びプログラム処理装置及びプログラム処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141215

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150519

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150625

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150702

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151002

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20160311