(57)【要約】      （修正有）【課題】Ｊａｖａ（登録商標）実行環境で、組み込み機器内の機密情報を含まない標準ヒープダンプを出力する情報処理装置およびその制御方法、並びにプログラムを提供する。【解決手段】情報処理装置であって、複数のアプリケーションが動作する実行環境が出力する、複数のアプリケーションそれぞれに関するオブジェクトのオブジェクト情報を含む第１のヒープダンプを取得する取得手段と、複数のアプリケーションの中からアプリケーションの指定を受け付ける指定手段と、指定手段にて指定されたアプリケーションに対応するクラスローダを特定する特定手段と、第１のヒープダンプから、前記特定手段にて特定したクラスローダに対応づけられたオブジェクト情報を抽出する第１の抽出手段と、第１の抽出手段にて抽出されたオブジェクト情報を第２のヒープダンプとして生成する生成手段とを有する。【選択図】図１
2018060472.tif 000002
【特許請求の範囲】
【請求項１】
複数のアプリケーションが動作する実行環境が出力する、前記複数のアプリケーションそれぞれに関するオブジェクトのオブジェクト情報を含む第１のヒープダンプを取得する取得手段と、
前記複数のアプリケーションの中からアプリケーションの指定を受け付ける指定手段と、
前記指定手段にて指定されたアプリケーションに対応するクラスローダを特定する特定手段と、
前記第１のヒープダンプから、前記特定手段にて特定したクラスローダに対応づけられたオブジェクト情報を抽出する第１の抽出手段と、
前記第１の抽出手段にて抽出されたオブジェクト情報を第２のヒープダンプとして生成する生成手段と
を有することを特徴とする情報処理装置。
【請求項２】
前記実行環境は、前記複数のアプリケーションを管理する管理手段を備え、
前記特定手段は、前記管理手段が動作している場合、前記管理手段に問い合わせを行うことで前記指定手段にて指定されたアプリケーションに対応するクラスローダを特定することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記特定手段は、前記管理手段が動作していない場合、前記指定手段にて指定されたアプリケーションに対応するクラスローダを、前記指定手段にて受け付けたアプリケーションの情報に基づいて前記第１のヒープダンプを検索することで特定することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記第１の抽出手段にて抽出されたオブジェクト情報が参照先として示す別のオブジェクトのオブジェクト情報を前記第１のヒープダンプから抽出する第２の抽出手段を更に備え、
前記生成手段は、前記第２の抽出手段にて抽出した前記別のオブジェクトのオブジェクト情報を更に前記第２のヒープダンプに含めることを特徴とする請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項５】
前記生成手段は、前記第２の抽出手段にて抽出したオブジェクト情報に対応づけられたクラスローダと前記特定手段にて特定したクラスローダとが一致する場合、前記第２の抽出手段にて抽出したオブジェクト情報を前記第２のヒープダンプに含めないことを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記実行環境にて動作する、公開されているソースコードを取得する第２の取得手段と、
前記第１のヒープダンプに含まれるオブジェクト情報のうち、前記特定手段にて特定されたクラスローダに対応づけられていないオブジェクト情報であって、前記ソースコードに含まれるクラスのオブジェクト情報を抽出する第３の抽出手段と
前記第３の抽出手段にて抽出されたオブジェクト情報の前記クラスのアクセス修飾子が所定のアクセス修飾子であるか否かを判定する判定手段と、
を備え、
前記生成手段は、前記判定手段にて前記クラスのアクセス修飾子が前記所定のアクセス修飾子であると判定された場合、前記第３の抽出手段にて抽出されたオブジェクト情報を前記第２のヒープダンプに含めることを特徴とする請求項１乃至５のいずれか一項に記載の情報処理装置。
【請求項７】
前記判定手段は、前記クラスのアクセス修飾子を判定する場合、前記第３の取得手段にて取得されたソースコードにおける前記クラスのアクセス修飾子と、前記実行環境で実行されているソースコードにおける前記クラスのアクセス修飾子の両方に対して判定を行い、
前記生成手段は、前記判定手段にていずれにおいても前記クラスのアクセス修飾子が前記所定のアクセス修飾子であると判定された場合に、前記第３の抽出手段にて抽出されたオブジェクト情報を前記第２のヒープダンプに含めることを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記実行環境は、Ｊａｖａの実行環境であり、
前記所定のアクセス修飾子は、“ｐｕｂｌｉｃ”であることを特徴とする請求項６または７に記載の情報処理装置。
【請求項９】
前記情報処理装置は、画像形成装置であり、
前記取得手段は、前記画像形成装置が備える実行環境から前記第１のヒープダンプを取得することを特徴とする請求項１乃至８のいずれか一項に記載の情報処理装置。
【請求項１０】
前記取得手段は、前記情報処理装置とは別の情報処理装置が備える実行環境から前記第１のヒープダンプを取得することを特徴とする請求項１乃至５のいずれか一項に記載の情報処理装置。
【請求項１１】
複数のアプリケーションが動作する実行環境が出力する、前記複数のアプリケーションそれぞれに関するオブジェクトのオブジェクト情報を含む第１のヒープダンプを取得する取得工程と、
前記複数のアプリケーションの中からアプリケーションの指定を受け付ける指定工程と、
前記指定工程にて指定されたアプリケーションに対応するクラスローダを特定する特定工程と、
前記第１のヒープダンプから、前記特定工程にて特定したクラスローダに対応づけられたオブジェクト情報を抽出する第１の抽出工程と、
前記第１の抽出工程にて抽出されたオブジェクト情報を第２のヒープダンプとして生成する生成工程と
を有することを特徴とする情報処理装置の制御方法。
【請求項１２】
コンピュータを、
複数のアプリケーションが動作する実行環境が出力する、前記複数のアプリケーションそれぞれに関するオブジェクトのオブジェクト情報を含む第１のヒープダンプを取得する取得手段、
前記複数のアプリケーションの中からアプリケーションの指定を受け付ける指定手段、
前記指定手段にて指定されたアプリケーションに対応するクラスローダを特定する特定手段、
前記第１のヒープダンプから、前記特定手段にて特定したクラスローダに対応づけられたオブジェクト情報を抽出する第１の抽出手段、
前記第１の抽出手段にて抽出されたオブジェクト情報を第２のヒープダンプとして生成する生成手段
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置およびその制御方法、並びにプログラムに関する。
【背景技術】
【０００２】
組み込み機器において、ひとつのＪａｖａ（登録商標）実行環境で複数のアプリケーション（以降、アプリと呼ぶ）が動作する場合がある。ここで、Ｊａｖａ実行環境で動作するアプリはＪａｖａプログラムで記述され、また、複数のアプリを管理するためのフレームワーク（以降、アプリ管理フレームワークと呼ぶ）もＪａｖａプログラムで記述されている。Ｊａｖａ実行環境には、Ｊａｖａプログラムの開発者らのために、ヒープダンプファイル（以降、標準ヒープダンプと呼ぶ）を出力する標準機能がある。この標準ヒープダンプには、Ｊａｖａ実行環境上でメモリ領域を使用していたオブジェクトの情報（インスタンスの情報）が記載されている。
【０００３】
例えば、Ｊａｖａプログラムの開発者は、プログラムをデバッグするための助けとして、標準ヒープダンプを利用することができる。これは、組み込み機器で動作するＪａｖａ実行環境においても同様である。開発者は、標準ヒープダンプを利用することで、システムのデバッグ開発や、アプリのデバッグ開発を効率的に行うことができる。また、障害調査時の開発者の助けとして、アプリケーションが異常な動作を行ったタイミングで標準ヒープダンプを出力する技術がある（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−７８１７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１の技術では、標準ヒープダンプに組み込み機器内の機密情報が含まれてしまうため、セキュリティ脆弱性上のリスクを伴ってしまう。また、アプリ開発者に標準ヒープダンプを利用されるとセキュリティ脆弱性上のリスクを伴ってしまう。その理由は、組み込み機器内の機密情報がアプリ開発者に流出してしまうためである。標準ヒープダンプには、システムが扱うパスワードなどといった機密情報も含まれている。そのため、標準ヒープダンプをアプリ開発者に利用されると、その機密情報もアプリ開発者から解析可能となってしまう。さらに、異なる会社に属するアプリ開発者間において、一方のアプリ開発者が、標準ヒープダンプを利用して、開発会社の異なるもう一方のアプリの機密情報を解析することも可能となってしまう。
【０００６】
従来のＪａｖａ実行環境では、組み込み機器内の機密情報を含まないような標準ヒープダンプを出力することはできないという課題がある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために本願発明は以下の構成を有する。すなわち、複数のアプリケーションが動作する実行環境が出力する、前記複数のアプリケーションそれぞれに関するオブジェクトのオブジェクト情報を含む第１のヒープダンプを取得する取得手段と、前記複数のアプリケーションの中からアプリケーションの指定を受け付ける指定手段と、前記指定手段にて指定されたアプリケーションに対応するクラスローダを特定する特定手段と、前記第１のヒープダンプから、前記特定手段にて特定したクラスローダに対応づけられたオブジェクト情報を抽出する第１の抽出手段と、前記第１の抽出手段にて抽出されたオブジェクト情報を第２のヒープダンプとして生成する生成手段とを有する。
【発明の効果】
【０００８】
本発明により、システムや各種アプリが扱う機密情報を含まないヒープダンプファイルをアプリ開発者に提供でき、セキュリティ脆弱性上のリスクを排除することができる。
【図面の簡単な説明】
【０００９】
【図１】画像形成装置の構成例を示す図。
【図２】画像形成装置のハードウェア構成例を示す図。
【図３】アプリ実行環境の構成例を示す図。
【図４】第一の実施形態に係るヒープダンプを模式的に表した図。
【図５Ａ】第一の実施形態に係るアプリ情報ヒープダンプの出力処理を示すフローチャート。
【図５Ｂ】第一の実施形態に係るアプリ情報ヒープダンプ作成処理を示すフローチャート。
【図６】第二の実施形態に係るヒープダンプを模式的に表した図。
【図７Ａ】第二の実施形態に係るアプリ情報ヒープダンプ作成処理を示すフローチャート。
【図７Ｂ】第二の実施形態に係る参照オブジェクト追加処理を示すフローチャート。
【図８】第三の実施形態に係るヒープダンプを模式的に表した図。
【図９Ａ】第三の実施形態に係るアプリ情報ヒープダンプの出力処理を示すフローチャート。
【図９Ｂ】第三の実施形態に係るアプリ情報ヒープダンプ作成処理を示すフローチャート。
【発明を実施するための形態】
【００１０】
以下、本発明を実施するための形態について図面を用いて説明する。
【００１１】
＜第一の実施形態＞
［システム構成］
図１は、本発明の第一の実施形態のシステム全体の構成例を示す図である。図１において、システムは、画像形成装置１００と情報処理装置１０１を含み、これらがネットワーク１２０を介して通信可能に接続されている。画像形成装置１００は、例えば、ＭＦＰ（Ｍｕｌｔｉ−Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ）などが該当するが、これに限定するものではない。情報処理装置１０１は、画像形成装置１００を管理するための情報処理装置であり、例えば、一般的なＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）などが該当する。
【００１２】
画像形成装置１００は、１または複数のアプリケーションが動作可能である。本実施形態において、画像形成装置１００上で、３つのアプリケーション（アプリケーションＡ１１０、アプリケーションＢ１１１、アプリケーションＣ１１２）が動作しているものとして説明を行う。以下の説明において、アプリケーションをまとめて説明する場合には、「アプリ１１ｎ」という表現にて示し、アプリを個別に説明する必要がある場合には、アプリＡ１１０、アプリＢ１１１、アプリＣ１１２として示す。
【００１３】
一般利用者およびシステム（もしくは各アプリ）の管理者は、画像形成装置１００の基本機能、アプリ１１ｎ、および、画像形成装置１００やアプリ１１ｎを管理するためのリソース管理装置を利用することが可能である。利用に当たっては、画像形成装置１００を直接操作、もしくはネットワーク１２０経由で情報処理装置１０１から操作することが可能である。
【００１４】
図２は、画像形成装置１００のハードウェア構成の一例を図式化したものである。画像形成装置１００は、コア部２００、ユーザインタフェース部２０１、記憶装置２０２、ネットワークインタフェース部２０３、スキャナ部２０４、プリンタ部２０５、及び、フィニッシャ部２０６を含んで構成される。コア部２００は、ＣＰＵなどから構成され、画像形成装置１００の全体を制御する。ユーザインタフェース部２０１は、表示部や入力部を備え、ユーザへのインタフェースとして機能する。記憶装置２０２は、ＲＯＭやＲＡＭ、ＨＤＤなどを含み、各種データを記憶する。本実施形態に係る標準ヒープダンプに関するメモリも記憶装置２０２に含まれる。ネットワークインタフェース部２０３は、ネットワーク１２０に接続し、外部装置等と通信するためのインタフェース部である。スキャナ部２０４、プリンタ部２０５、及びフィニッシャ部２０６は、各種画像形成動作を実行する。なお、画像形成装置１００のハードウェア構成は上記に限定するものではなく、画像形成に係る機能に応じて、部位が異なっていてよい。
【００１５】
図３は、本実施形態に係る画像形成装置１００でアプリ１１ｎを実行するためのアプリ実行環境の構成例を示す図である。本実施形態では、アプリの実行環境として、Ｊａｖａ（登録商標）を利用するものとして説明を行う。画像形成装置１００は、Ｊａｖａ実行環境３０１、アプリ管理フレームワーク３０２、サポートライブラリ３０３、アプリ１１ｎ、およびダンプ分割モジュール３０６を含んで構成される。各構成要素はモジュールであり、以下の説明では、これらを包括してシステムと称する。なお、本実施形態において、ダンプ分割モジュール３０６は、画像形成装置１００のシステムの一部として動作する構成について説明するが、この構成に限定するものではない。例えば、画像形成装置１００から各種情報を取得できれば、情報処理装置１０１側で動作してもよい。
【００１６】
画像形成装置１００の電源が投入されると、Ｊａｖａ実行環境３０１が起動され、アプリ１１ｎを実行可能にするために必要なアプリ管理フレームワーク３０２が起動される。一般に、Ｊａｖａ実行環境３０１は、オブジェクトの情報が記載された標準ヒープダンプを記憶装置２０２に出力する機能を備える。アプリ管理フレームワーク３０２は、アプリ１１ｎのインストールおよびアンインストール、実行と停止といった、アプリのライフサイクルを管理する。ユーザがＪａｖａ実行環境３０１内へアプリ１１ｎをインストールして実行するためには、アプリ管理フレームワーク３０２が必要になる。一般的な基本動作として、アプリ管理フレームワーク３０２は、管理者がアプリ１１ｎをインストールするリクエストを行うことにより、インストール動作を行う。
【００１７】
サポートライブラリ３０３は、アプリ１１ｎが画像形成装置１００の様々な機能を利用するために用いられるライブラリである。Ｊａｖａ実行環境３０１にはシステムクラスローダ３０４が備えられる。システムクラスローダ３０４は、システムのクラスをロードするためのクラスローダである。ロードされていないクラスの実行処理をシステムが命令した場合、システムクラスローダ３０４は、クラスパスに設定されているサポートライブラリ３０３から、実行処理を命令されているクラスを探索する。クラスはアプリ実行基盤（Ｊａｖａ実行環境３０１）が命令を実行するための実行コードになっており、クラスパスはクラスが含まれたライブラリの所在場所を示すパスである。システムクラスローダ３０４がクラスを探索して、ライブラリの中にクラスを見つけた場合、システムクラスローダ３０４はライブラリからクラスをロードする。そして、システムクラスローダ３０４がクラスをロードした後、Ｊａｖａ実行環境３０１はロードされたクラスを実行する。クラスが見つからなかった場合は、その旨をコンソール画面やブラウザ画面などをユーザインタフェース部２０１に表示してユーザに警告、通知する。
【００１８】
アプリクラスローダ群３０５は、アプリのクラスをロードするためのクラスローダ群であり、アプリ管理フレームワーク３０２に含まれる。アプリクラスローダの基本的な動作はシステムクラスローダ３０４と同様であるが、システムクラスローダ３０４がシステムのクラスをロードするのに対し、アプリクラスローダはアプリのクラスをロードする。アプリクラスローダは、アプリ１１ｎごとにアプリ管理フレームワーク３０２によって用意される。つまり、アプリ管理フレームワーク３０２は１つのアプリに対し、１つのアプリクラスローダを用意するため、アプリとアプリクラスローダの関係は１対１になる。以降、アプリＡ１１０に対応するクラスローダをアプリクラスローダＡ３０５０とする。同様に、アプリＢ１１１に対応するクラスローダをアプリクラスローダＢ３０５１とし、アプリＣ１１２に対応するクラスローダをアプリクラスローダＣ３０５２とする。以下の説明において、アプリクラスローダをまとめて説明する場合には、アプリクラスローダ３０５ｎもしくはアプリクラスローダ群３０５という表現にて示す。また、アプリクラスローダを個別に説明する必要がある場合には、アプリクラスローダＡ３０５０、アプリクラスローダＢ３０５１、アプリクラスローダＣ３０５２として示す。
【００１９】
一般に、ロードされていないクラスの実行処理をアプリ１１ｎが命令した場合、まず、システムクラスローダ３０４が、クラスパスに設定されているサポートライブラリ３０３から、実行処理を命令されているクラスを探索する。システムクラスローダ３０４がクラスを見つけた場合は、そのままシステムクラスローダ３０４がサポートライブラリ３０３のクラスをロードする。システムクラスローダ３０４がクラスを見つけられなかった場合、アプリクラスローダ３０５ｎがアプリ１１ｎ内からクラスを探索する。アプリクラスローダ３０５ｎがクラスを見つけた場合、アプリクラスローダ３０５ｎはアプリ１１ｎからクラスをロードする。そして、アプリクラスローダ３０５ｎがクラスをロードした後、アプリ１１ｎは、ロードされたクラスを実行する。クラスが見つからなかった場合は、その旨をユーザインタフェース部２０１を通じてユーザに警告、通知する。
【００２０】
ダンプ分割モジュール３０６は、システム等の機密情報を含まない、特定のアプリに関する情報を含むヒープダンプ（以下、アプリ情報ヒープダンプ）を作成するためのモジュールである。例えば、ユーザは、アプリ１１ｎのデバッグ開発のために、ヒープダンプ出力命令をダンプ分割モジュール３０６に対して行う。なお、以下の説明において、ユーザは、主にアプリ１１ｎの開発者をはじめとする一般利用者を指す。本実施形態において、ダンプ出力命令を行う際に、ユーザはどのアプリ１１ｎのヒープダンプを取得したいかを指定する。ダンプ分割モジュール３０６は、ユーザからダンプ出力命令を受け付けると処理を開始する。
【００２１】
まず、ダンプ分割モジュール３０６は、Ｊａｖａ実行環境３０１に標準ヒープダンプ出力命令を行う。上述したように、Ｊａｖａ実行環境３０１は、機密情報などの各種情報を含む標準ヒープダンプを出力する機能を備えるものとする。次に、ダンプ分割モジュール３０６は、Ｊａｖａ実行環境３０１が出力した標準ヒープダンプを読み込む。標準ヒープダンプを読み込んだ後、ダンプ分割モジュール３０６は、ユーザが指定したアプリ１１ｎに対応するアプリクラスローダ３０５ｎが標準ヒープダンプに記載されているか否かの確認を行う。標準ヒープダンプにアプリクラスローダ３０５ｎが記載されていた場合、ダンプ分割モジュール３０６は、標準ヒープダンプに記載されたすべてのオブジェクトのクラスローダに対して、アプリクラスローダ３０５ｎと同一のものか否かの確認を行う。そして、ダンプ分割モジュール３０６は、アプリクラスローダ３０５ｎと同一であったオブジェクトだけを記載するアプリ情報ヒープダンプを作成する。
【００２２】
アプリ情報ヒープダンプには、ユーザが指定したアプリ１１ｎ内にあるクラスの情報しか含まれていない。言い換えると、ダンプ分割モジュール３０６は、機密情報を含まないヒープダンプを作成したことになる。つまり、標準ヒープダンプの中から、アプリ１１ｎに対応した情報を抽出することにより、アプリ情報ヒープダンプが作成されることとなる。ユーザは、このアプリ情報ヒープダンプを利用することで、例えば、ユーザ自身が開発するアプリ１１ｎのデバッグを効率的に行える。
【００２３】
図４は、本実施形態に係るヒープダンプを模式的に表した例である。ヒープダンプは、記憶装置２０２のメモリ領域を使用していたオブジェクトの情報（インスタンスの情報）が記載されており、Ｊａｖａ実行環境３０１やダンプ分割モジュール３０６によって、記憶装置２０２に記憶される。
【００２４】
図４（ａ）は、Ｊａｖａ実行環境３０１によって出力される標準ヒープダンプを模式的に表したものである。標準ヒープダンプには、標準ヒープダンプを作成した時点の、Ｊａｖａ実行環境３０１上で記憶装置２０２のメモリ領域を使用していたすべてのオブジェクトの情報が記載されている。標準ヒープダンプは、オブジェクトＩＤ４０１、クラス情報４０２、メンバ情報４０３、及びクラスローダ情報４０４を含んで構成される。
【００２５】
オブジェクトＩＤ４０１は、すべてのオブジェクトに割り振られており、オブジェクトが生成される際にｊａｖａ実行環境３０１によって割り振られる。オブジェクトＩＤ４０１により、同じクラスのオブジェクトであっても、それぞれ別々のオブジェクトとして識別することができる。クラス情報４０２は、オブジェクトＩＤ４０１に対するオブジェクトのクラスの情報である。メンバ情報４０３は、オブジェクトＩＤ４０１に対するオブジェクトが持つメンバの情報である。メンバ情報４０３には、どのオブジェクトを参照しているかが記載されている。値が「ｎｕｌｌ」の場合は、オブジェクトを参照していない状態を示している。オブジェクトを参照している場合は、オブジェクトＩＤが記載される。メンバ情報４０３により、各オブジェクトが他のどのオブジェクトを参照しているかを知ることができる。加えて、すべてのオブジェクトの参照先が分かれば、任意のオブジェクトが他のどのオブジェクトから参照されているかも知ることができる。
【００２６】
クラスローダ情報４０４は、オブジェクトＩＤ４０１に対するオブジェクトのクラスローダ情報である。クラス情報４０２に記載されているクラスは必ずシステムクラスローダ３０４、もしくはアプリクラスローダ３０５ｎのうちのいずれか１つのクラスローダからロードされる。従って、オブジェクトＩＤ４０１が分かれば、それに対するオブジェクトのクラスも分かるため、各オブジェクトがどのクラスローダがロードしたクラスから生成されたかを知ることができる。例えば、あるオブジェクトＳがシステムクラスローダ３０４によってロードされたクラスから生成されていれば、そのオブジェクトＳはシステムのクラスから生成されたものと判断することができる。また、あるオブジェクトＡがアプリクラスローダＡ３０５０によってロードされたクラスから生成されていれば、そのオブジェクトＡはアプリＡ１１０のクラスから生成されたものと判断することができる。この場合、言い換えると、オブジェクトＡはアプリＡ１１０の情報ということになる。また、システムのクラスの中にはクラスローダの値が「ｎｕｌｌ」となっているものもある。本実施形態では、クラスローダの値が「ｎｕｌｌ」になっているオブジェクトに関して、そのオブジェクトのクラスはシステムのクラスであると判断する。
【００２７】
図４（ｂ）は、ダンプ分割モジュール３０６によって出力されるアプリ情報ヒープダンプを模式的に表したものである。４０１〜４０４にて示す各項目に関しては、図４（ａ）に示した標準ヒープダンプに記載されている項目と同様である。異なる点として、アプリ情報ヒープダンプには、標準ヒープダンプに記載されたオブジェクトのうち、ユーザに指定されたアプリ１１ｎのオブジェクト情報のみが記載されている。ダンプ分割モジュール３０６は、標準ヒープダンプのオブジェクト情報を順次参照する。そして、クラスローダがユーザに指定されたアプリ１１ｎに対応するアプリクラスローダ３０５ｎである場合に、ダンプ分割モジュール３０６は、そのオブジェクト情報をアプリ情報ヒープダンプに記載（抽出）していく。そして、ダンプ分割モジュール３０６が標準ヒープダンプに記載されたオブジェクト情報を最後まで参照し終わると、アプリ情報ヒープダンプの作成が終わり、記憶装置２０２に記憶される。
【００２８】
［処理フロー］
図５Ａは、ダンプ分割モジュール３０６がアプリ情報ヒープダンプを出力する処理の流れを模式的に示すフローチャートである。本処理フローは、例えば、記憶装置２０２に格納された各種プログラムをコア部２００が読み出して実行することにより実現される。
【００２９】
ユーザがダンプ出力命令を行うと、Ｓ５００１にて、ダンプ分割モジュール３０６は、その命令を検知する。例えば、ユーザは、ユーザインタフェース部２０１、もしくは、情報処理装置１０１などを通してダンプ出力命令の入力を行うことができる。ユーザは、ここで、画像形成装置１００にインストールされているどのアプリのダンプを出力するかを、アプリ情報を入力することで指定する。従って、ダンプ分割モジュール３０６は、ダンプ出力命令と併せて、ユーザが指定したアプリ１１ｎのアプリ情報も取得する。ここで取得されるアプリ情報としては、例えば、アプリ１１ｎごとに割り当てられているアプリＩＤが挙げられる。なお、ダンプ分割モジュールがアプリ１１ｎを一意に特定できる識別情報であれば、アプリのプログラム、アプリ名など他の情報でもよい。特に、アプリ１１ｎのプログラムなど、そのアプリ１１ｎの開発者しか知り得ない情報は、より好ましい。識別情報が開発者しか知り得ない情報であれば、アプリ情報ヒープダンプもそのアプリ１１ｎの開発者しか入手できなくなるため、第三者によってそのアプリ１１ｎを解析される可能性が減る。
【００３０】
このとき、ダンプ分割モジュール３０６は、ユーザからの入力を取得すると同時に、アプリ１１ｎのプログラムが正しい情報か否かを判定する必要もある。これは、第三者がアプリ１１ｎのプログラムを偽造してアプリ情報ヒープダンプを取得しようとする可能性があるためである。判定する例としては、ユーザが入力したアプリ１１ｎのプログラムと、記憶装置２０２に記憶された実行ファイルもしくはｊａｖａ実行環境３０１が実行しているプログラムの比較を行って判定する方法がある。
【００３１】
Ｓ５００２にて、ダンプ分割モジュール３０６は、標準ヒープダンプの取得を行う。ダンプ分割モジュール３０６は、標準ヒープダンプを取得するために、まず、Ｊａｖａ実行環境３０１に標準ヒープダンプ出力命令を行う。そして、ダンプ分割モジュール３０６は、Ｊａｖａ実行環境３０１が出力した標準ヒープダンプを取得する。画像形成装置１００がシステムハングアップしていてＪａｖａ実行環境３０１が動作できず標準ヒープダンプを出力できない場合には、ダンプ分割モジュール３０６にはエラーが返される。エラーが返された場合、ダンプ分割モジュール３０６は、ヒープダンプを出力できない旨をユーザに警告、通知する。なお、ダンプ分割モジュール３０６が標準ヒープダンプ出力命令を行う前に、Ｊａｖａ実行環境３０１が標準ヒープダンプを出力している場合は、ダンプ分割モジュール３０６はそのすでに出力されている標準ヒープダンプを取得してもよい。
【００３２】
Ｓ５００３にて、ダンプ分割モジュール３０６は、アプリ管理フレームワーク３０２が動作可能な状態か否かを判定する。ダンプ分割モジュール３０６がアプリ情報ヒープダンプを作成する際の、画像形成装置１００の状態には主に２種類のケースがある。ここでのケースとは、アプリ管理フレームワーク３０２が動作可能な状態のケースと、動作することができない状態のケースである。例えば、アプリ１１ｎ内やアプリ管理フレームワーク３０２内でエラーを起こしている場合にはアプリ管理フレームワーク３０２は動作できない状態になる。アプリ管理フレームワーク３０２が動作することができない状態になると、Ｊａｖａ実行環境３０１も一部機能を実行できなくなる。しかし、そのような状態でも、Ｊａｖａ実行環境３０１がシステムハングアップしていない状態であれば、Ｊａｖａ実行環境３０１は標準ヒープダンプを出力することが可能である。
【００３３】
以降の処理において、ダンプ分割モジュール３０６は、ユーザが指定したアプリ１１ｎに対するアプリクラスローダ３０５ｎを特定する処理を行う。このとき、アプリ管理フレームワーク３０２が動作可能な状態あれば、ダンプ分割モジュール３０６は、アプリ管理フレームワーク３０２に問い合わせを行うことで、特定に係る処理時間を省略することができる。アプリ管理フレームワーク３０２が動作可能な状態であれば（Ｓ５００３にてＹＥＳ）Ｓ５００４に処理を進め、動作可能な状態でなければ（Ｓ５００３にてＮＯ）Ｓ５００６に処理を進める。
【００３４】
Ｓ５００４にて、ダンプ分割モジュール３０６は、ユーザが指定したアプリ１１ｎに対応するアプリクラスローダ３０５ｎの情報を取得する。ダンプ分割モジュール３０６は、動作しているアプリ管理フレームワーク３０２に、ユーザが指定したアプリ１１ｎに対応するアプリクラスローダを問い合わせることにより、情報を取得することができる。ここで取得するアプリクラスローダ３０５ｎの情報は、オブジェクトＩＤである。ダンプ分割モジュール３０６は、オブジェクトＩＤを取得することで、アプリクラスローダ群３０５の中から、ユーザに指定されたアプリ１１ｎに対応したアプリクラスローダ３０５ｎを特定することができる。
【００３５】
Ｓ５００５にて、ダンプ分割モジュール３０６は、Ｓ５００４で取得したアプリクラスローダ３０５ｎの情報（オブジェクトＩＤ）が、Ｓ５００２で取得した標準ヒープダンプに記載されているか否かを判定する。つまり、この後の処理で、アプリクラスローダ３０５ｎの情報を基にアプリ情報ヒープダンプの作成を行うため、そのアプリクラスローダ３０５ｎの情報が標準ヒープダンプに記載されていることを確認している。記載されていれば（Ｓ５００５にてＹＥＳ）Ｓ５００９に処理を進め、記載されていなければ（Ｓ５００５にてＮＯ）Ｓ５００６に処理を進める。
【００３６】
Ｓ５００６にて、ダンプ分割モジュール３０６は、ユーザが指定したアプリ１１ｎに対するアプリクラスローダ３０５ｎの情報を、Ｓ５００１で取得した標準ヒープダンプから探索する。標準ヒープダンプには、すべてのオブジェクト情報が記載されているため、アプリＩＤなどのアプリを識別する情報を検索すれば、その情報を持っているクラスローダを特定することができる。ここでユーザが指定したアプリ１１ｎのアプリＩＤを持ったクラスローダを探索することで、ユーザが指定したアプリ１１ｎに対応したアプリクラスローダ３０５ｎの情報を取得することができる。
【００３７】
Ｓ５００７にて、ダンプ分割モジュール３０６は、アプリＩＤやアプリクラスローダ３０５ｎを見つけることができたか否かを判定する。見つけることができた場合（Ｓ５００７にてＹＥＳ）Ｓ５００８に処理を進め、見つけることができなかった場合（Ｓ５００７にてＮＯ）Ｓ５０１１に処理を進める。
【００３８】
Ｓ５００８にて、ダンプ分割モジュール３０６は、標準ヒープダンプから見つけたユーザに指定されたアプリ１１ｎに対応するアプリクラスローダ３０５ｎを取得する。
【００３９】
Ｓ５００９にて、ダンプ分割モジュール３０６は、ユーザが指定したアプリの情報のみが記載されたアプリ情報ヒープダンプの作成処理を行う。本処理工程の詳細は、図５Ｂを用いて後述する。
【００４０】
Ｓ５０１０にて、ダンプ分割モジュール３０６は、Ｓ５００９で作成したアプリ情報ヒープダンプを出力する。ここで、ダンプ分割モジュール３０６は、ユーザインタフェース部２０１や、情報処理装置１０１を通してアプリ情報ヒープダンプを出力する。ここでの出力は、所定のアプリケーションなどを利用して、ユーザが認識しやすいユーザインタフェース画面にて表示してもよいし、所定の記憶領域に出力してもよい。そして、本処理フローを終了する。
【００４１】
Ｓ５０１１にて、ダンプ分割モジュール３０６は、エラー処理を行う。エラー処理として、ダンプ分割モジュール３０６は、ユーザインタフェース部２０１や情報処理装置１０１を通して、指定されたアプリ１１ｎの情報が見つからなかった旨をユーザに警告、通知する。そして、本処理フローを終了する。
【００４２】
（アプリ情報ヒープダンプ作成処理）
図５Ｂは、本実施形態に係る、図５ＡのＳ５００９の工程におけるアプリ情報ヒープダンプを作成する処理の流れを模式的に示すフローチャートである。
【００４３】
Ｓ５１０１にて、ダンプ分割モジュール３０６は、標準ヒープダンプに記載された最初のオブジェクトを調査する。ここでは、例として、図４（ａ）に示したような標準ヒープダンプに記載されたオブジェクト情報を１行目から順に調査していくものとする。以下、調査の対象として選択したオブジェクトを「調査オブジェクト」と称する。
【００４４】
Ｓ５１０２にて、ダンプ分割モジュール３０６は、調査オブジェクトに対するクラスローダ情報４０４を取得する。標準ヒープダンプには、各オブジェクトに対するオブジェクトＩＤ４０１と、オブジェクトＩＤ４０１に対するクラス情報４０２が記載されている。そのため、クラス情報４０２からそのクラスをロードしたクラスローダの情報（システムクラスローダ３０４もしくはアプリクラスローダ３０５ｎ）を特定することができる。ダンプ分割モジュール３０６は、ここで特定したクラスローダ情報４０４を取得する。
【００４５】
Ｓ５１０３にて、ダンプ分割モジュール３０６は、Ｓ５１０２で取得したクラスローダ情報４０４と、Ｓ５００４もしくはＳ５００８で取得したアプリクラスローダ３０５ｎの情報（オブジェクトＩＤ）が同一か否かを判定する。同一である場合（Ｓ５１０３にてＹＥＳ）Ｓ５１０４に処理を進め、同一でない場合（Ｓ５１０３にてＮＯ）Ｓ５１０５に処理を進める。
【００４６】
Ｓ５１０４にて、ダンプ分割モジュール３０６は、調査オブジェクトのオブジェクト情報を標準ヒープダンプから抽出し、アプリ情報ヒープダンプに記載（追加）する。ここでアプリ情報ヒープダンプに記載するオブジェクト情報は、標準ヒープダンプに記載されている調査オブジェクトのオブジェクト情報と同一の情報である。つまり、調査オブジェクトの、図４（ａ）に示す４０１〜４０４の項目の情報が抽出される。
【００４７】
Ｓ５１０５にて、ダンプ分割モジュール３０６は、標準ヒープダンプに未調査のオブジェクトがあるか否かを判定する。未調査のオブジェクトがある場合（Ｓ５１０５にてＹＥＳ）Ｓ５１０６に処理を進め、未調査のオブジェクトが無い（つまり、すべてのオブジェクトを調査済み）場合は（Ｓ５１０５にてＮＯ）本処理フローを終了する。
【００４８】
Ｓ５１０６にて、ダンプ分割モジュール３０６は、標準ヒープダンプに記載された次の未調査のオブジェクトを調査オブジェクトとし、Ｓ５１０２へ戻る。ここでは、ダンプ分割モジュール３０６は、標準ヒープダンプの中で、今まで調査していたオブジェクトの次の行に記載されたオブジェクトを調査対象とする。
【００４９】
上記のように、ダンプ分割モジュール３０６は、標準ヒープダンプに記載されたオブジェクト情報を順に調査していき、まずそのオブジェクトが、ユーザの指定したアプリ１１ｎのオブジェクトか否かを判定する。ダンプ分割モジュール３０６は、この判定には、クラスローダ情報４０４を用いる。調査オブジェクトに対するクラスローダが、ユーザの指定したアプリ１１ｎに対応するアプリクラスローダ３０５ｎであれば、調査オブジェクトがユーザの指定したアプリ１１ｎのオブジェクトであると判定される。そして、ダンプ分割モジュール３０６は、調査オブジェクトの情報をアプリ情報ヒープダンプに記載する。対して、調査オブジェクトに対するクラスローダが、他のアプリのアプリクラスローダ３０５ｎやシステムクラスローダ３０４であった場合、調査オブジェクトは、画像形成装置１００（もしくは他のアプリ）の機密情報と判定される。機密情報と判定された調査オブジェクトは、ユーザに指定されたアプリに対応するアプリ情報ヒープダンプには記載されない。
【００５０】
このように、ダンプ分割モジュール３０６は、ユーザが指定したアプリのオブジェクトか否かを判定して、アプリ情報ヒープダンプにユーザの指定したアプリ１１ｎのオブジェクト情報を記載（抽出）していく。そして、標準ヒープダンプに記載されたすべてのオブジェクトに対して、オブジェクトの判定処理と、アプリ情報ヒープダンプへのアプリのオブジェクト情報の記載処理を行うことで、ダンプ分割モジュール３０６はアプリ情報ヒープダンプの作成を行う。標準ヒープダンプに記載されたオブジェクトをすべて調査するため、ここで作成し終わったアプリ情報ヒープダンプには、ユーザの指定したアプリ１１ｎのすべてのオブジェクト情報が記載されることになる。
【００５１】
以上、本実施形態では、ダンプ分割モジュール３０６が、利用者（アプリ開発者等）に指定されたアプリ１１ｎのオブジェクト情報を記載したアプリ情報ヒープダンプを作成し、出力する。このようにアプリ情報ヒープダンプを作成することで、アプリのオブジェクト情報のみを記載したヒープダンプ、すなわち、システムの扱う機密情報や、他のアプリの機密情報を含まないヒープダンプを作成し、出力することができる。
【００５２】
＜第二の実施形態＞
本発明の第二の実施形態について図を用いて説明する。第一の実施形態では、ダンプ分割モジュール３０６が、指定されたアプリ１１ｎのオブジェクト情報を記載したアプリ情報ヒープダンプを作成し、そのアプリ情報ヒープダンプを出力していた。ここで、アプリ開発者は、アプリ１１ｎのオブジェクトが参照しているシステムのオブジェクトや他のアプリのオブジェクト情報も知ることができれば、さらに開発効率を上げることができる。
【００５３】
例えば、図４（ｂ）において、アプリＡ１１０のアプリ開発者は、アプリＡ１１０のオブジェクトのメンバの情報（メンバ情報４０３）を知ることができる。しかし、その情報が、システムのオブジェクトや他のアプリ（例えばアプリＢ１１１）のオブジェクトのオブジェクトＩＤであると、第一の実施形態の構成では、そのオブジェクトＩＤはアプリ情報ヒープダンプには記載されない。そのため、このようなオブジェクトに関しては、アプリ開発者は詳細な情報を知ることができない。
【００５４】
そこで、本実施形態では、ユーザの指定するアプリのオブジェクトが参照するような、システムのオブジェクトや、他のアプリのオブジェクトも、ダンプ分割モジュール３０６がアプリ情報ヒープダンプに記載する実施形態について説明する。なお、本実施形態に係るシステム構成、ハードウェア構成、及び、アプリ実行環境は、第一の実施形態にて述べた図１〜図３の構成と同じであるため、ここでの詳細な説明は省略する。
【００５５】
図６は、第二の実施形態に係るアプリ情報ヒープダンプを模式的に表したものである。４０１〜４０４の項目に関しては、第一の実施形態にて述べた図４（ａ）に示した標準ヒープダンプに記載されている項目と同様である。また、図４（ｂ）と同様に、アプリ情報ヒープダンプには、標準ヒープダンプに記載されたオブジェクトのうち、ユーザに指定されたアプリ１１ｎのオブジェクト情報も記載されている。異なる点として、第二の実施形態に係るアプリ情報ヒープダンプには、ユーザの指定されたアプリ１１ｎのオブジェクトが参照している、システムのオブジェクト情報や、他のアプリ１１ｎのオブジェクト情報も追加で記載されている。
【００５６】
例えば、ユーザに指定されたアプリＡ１１０のＡｐｐｌｉｃａｔｉｏｎＩｎｆｏオブジェクト（オブジェクトＩＤ：５２４６ｂｃ２３）が、ａｐｐＩＤ（オブジェクトＩＤ：５４２２６８５４）を参照しているとする。これは、図６に示すメンバ情報４０３を参照することで、参照先となる別のオブジェクト情報を特定することができる。また、ここでは、ａｐｐＩＤのクラスは、システムのクラスであるｓｙｓｔｅｍ．Ｓｔｒｉｎｇであるとする。この場合、本実施形態では、そのシステムのオブジェクト（オブジェクトＩＤ：５４２２６８５４）がアプリ情報ヒープダンプに記載される。そのため、ユーザは、本実施形態に係るアプリ情報ヒープダンプにより、アプリＡのオブジェクトが参照しているシステムのオブジェクトの情報も知ることができる。
【００５７】
［処理フロー］
図７Ａは、ダンプ分割モジュール３０６がアプリ情報ヒープダンプを作成する処理の流れを模式的に表すフローチャートである。本処理は、第一の実施形態にて述べた図５Ｂのフローの代わりに、図５ＡのＳ５００９の工程にて実行される処理である。なお、図５Ｂの処理と重複する工程については、同じ参照番号を付し、詳細な説明は省略する。以下、参照される側のオブジェクトを、「参照オブジェクト」と称する。
【００５８】
Ｓ５１０１〜Ｓ５１０６は、図５Ｂで示した処理と同様である。Ｓ５１０４にて調査オブジェクトの情報をアプリ情報ヒープダンプに記載した後、ダンプ分割モジュール３０６は、Ｓ７００１に処理を進める。
【００５９】
Ｓ７００１にて、ダンプ分割モジュール３０６は、調査オブジェクトが参照している参照オブジェクトをアプリ情報ヒープダンプに追加する。ここでの詳細な処理は図７Ｂを用いて説明する。そして、ダンプ分割モジュール３０６は、Ｓ７００１の処理が終わるとＳ５１０５に処理を進める。
【００６０】
（参照オブジェクト追加処理）
図７Ｂは、ダンプ分割モジュール３０６が、調査オブジェクトの参照オブジェクトをアプリ情報ヒープダンプに追加する処理を模式的に表すフローチャートである。
【００６１】
Ｓ７１０１にて、ダンプ分割モジュール３０６は、調査オブジェクトが他のオブジェクトを参照しているかを判定する。ここで参照しているか否かを判定するための情報は、標準ヒープダンプに含まれるメンバ情報４０３を用いることができる。他のオブジェクトを参照している場合は（Ｓ７１０１にてＹＥＳ）Ｓ７１０２へ処理を進め、参照していない場合は（Ｓ７１０１にてＮＯ）本処理フローを終了する。
【００６２】
Ｓ７１０２にて、ダンプ分割モジュール３０６は、参照オブジェクトのオブジェクト情報を取得する。参照オブジェクトが複数ある場合には、そのうちの未処理の参照オブジェクトを処理対象とする。調査オブジェクトが参照しているオブジェクトはオブジェクトＩＤとして標準ヒープダンプに記載されている。そのため、ダンプ分割モジュール３０６は、そのオブジェクトＩＤを基に、参照オブジェクトの情報を標準ヒープダンプから取得できる。
【００６３】
Ｓ７１０３にて、ダンプ分割モジュール３０６は、参照オブジェクトのクラスローダ情報４０４を取得する。
【００６４】
Ｓ７１０４にて、ダンプ分割モジュール３０６は、Ｓ７１０３で取得したクラスローダ情報４０４が、図７ＡのＳ５１０２で取得した調査オブジェクトのクラスローダ情報４０４と一致するか否かを判定する。一致しない場合は（Ｓ７１０４にてＮＯ）Ｓ７１０５へ処理を進め、一致する場合は（Ｓ７１０４にてＹＥＳ）Ｓ７１０６に処理を進める。
【００６５】
Ｓ７１０５にて、ダンプ分割モジュール３０６は、参照オブジェクトのオブジェクト情報をアプリ情報ヒープダンプに追加する。つまり、Ｓ７１０４の判定によりクラスローダ情報４０４が一致する参照オブジェクトのオブジェクト情報はここでは記載されない。これは、一致する参照オブジェクトのオブジェクト情報は図７ＡのＳ５１０４にてアプリ情報ヒープダンプに記載されるため、重複記載を避けるために行われる。
【００６６】
Ｓ７１０６にて、ダンプ分割モジュール３０６は、調査オブジェクトが参照している参照オブジェクトのうち未処理の参照オブジェクトがあるか否かを判定する。未処理の参照オブジェクトがある場合は（Ｓ７１０６にてＹＥＳ）Ｓ７１０７へ処理を進め、全ての参照オブジェクトの処理が終了している場合は（Ｓ７１０６にてＮＯ）本処理フローを終了する。
【００６７】
Ｓ７１０７にて、ダンプ分割モジュール３０６は、調査オブジェクトが参照している参照オブジェクトのうち、未処理の参照オブジェクトを処理対象とし、そのオブジェクト情報を標準ヒープダンプから取得する。取得後、Ｓ７１０３へ処理を進める。
【００６８】
以上、第二の実施形態では、ダンプ分割モジュール３０６は、ユーザに指定されたアプリ１１ｎのオブジェクトをアプリ情報ヒープダンプに記載した後、そのオブジェクトが参照しているオブジェクトもアプリ情報ヒープダンプに追加で記載する。
【００６９】
本実施形態に係るアプリ情報ヒープダンプについて簡単に説明する。例えば、図６では、アプリＡ１１０のクラスであるＡｐｐｌｉｃａｔｉｏｎＩｎｆｏＣｌａｓｓのオブジェクト（オブジェクトＩＤ：５２４６ｂｃ２３）がある。このオブジェクトは、ａｐｐＩＤ（オブジェクトＩＤ：５４２２６８５４）、ａｐｐＮａｍｅ（オブジェクトＩＤ：５００４７８ａｅ）、ａｐｐＴｙｐｅ（オブジェクトＩＤ：５０２１４５２３）というオブジェクトを参照している。ここでは、これらのオブジェクトがｓｙｓｔｅｍ．Ｓｔｒｉｎｇであるとする。本実施形態では、図６に示すように、ダンプ分割モジュール３０６がこれらの参照オブジェクトの情報もアプリ情報ヒープダンプに記載する。そのため、このアプリ情報ヒープダンプにより、ユーザは参照オブジェクトの情報も知ることができる。なお、ここでは簡単な例として、ｓｙｓｔｅｍ．Ｓｔｒｉｎｇを文字列として表現しているが、一般的なｃｈａｒ配列へのポインタを記載していてもよい。
【００７０】
以上、本実施形態では、ダンプ分割モジュール３０６が、ユーザに指定されたアプリのオブジェクトが参照するシステムのオブジェクトや他のアプリのオブジェクトもアプリ情報ヒープダンプに追加で記載する。この本実施形態に係るアプリ情報ヒープダンプにより、ユーザは参照オブジェクトの情報も知ることができる。
【００７１】
＜第三の実施形態＞
本発明の第三の実施形態について図を用いて説明する。第一の実施形態では、ダンプ分割モジュール３０６が、指定されたアプリ１１ｎのオブジェクト情報を記載したアプリ情報ヒープダンプを作成し、そのアプリ情報ヒープダンプを出力していた。ここで、アプリ開発者は、公開されているオブジェクトの情報、すなわちアプリから参照することが可能なオブジェクトの情報も知ることができれば、さらに開発効率を上げることができる。
【００７２】
例えば、図４（ｂ）において、アプリＡ１１０のアプリ開発者は、アプリＡ１１０のオブジェクトのメンバの情報（メンバ情報４０３）を知ることができる。しかし、第一の実施形態の構成では、アプリの開発のために公開されている画像形成装置１００の情報を知ることはできない。
【００７３】
一般に、プログラムの実動作上では、任意のオブジェクトをアプリなどに公開して良いか否かを判定するためのアクセス修飾子と呼ばれる識別子が各クラス情報に含まれている。Ｊａｖａ実行環境３０１はそのアクセス修飾子の情報を基に、任意のオブジェクトを他のモジュール（例えば他のアプリ）に公開して良いか否かを決定している。アプリに公開できるオブジェクト情報であれば、アプリ開発者にも公開してもセキュリティ上の問題はない。しかしながら、標準ヒープダンプにはこのアクセス修飾子の情報は含まれていない。そのため、ダンプ分割モジュール３０６が、各オブジェクトをアプリ開発者に公開して良いか否かを判断することができない。
【００７４】
そこで、本実施形態では、ダンプ分割モジュール３０６が公開可能な情報もアプリ情報ヒープダンプに記載する実施形態について説明する。なお、本実施形態に係るシステム構成、ハードウェア構成、及び、アプリ実行環境は、第一の実施形態にて述べた図１〜図３の構成と同じであるため、ここでの詳細な説明は省略する。
【００７５】
図８は、第三の実施形態に係るアプリ情報ヒープダンプを模式的に表したものである。４０１〜４０４の項目に関しては、第一の実施形態にて述べた図４（ａ）に示した標準ヒープダンプに記載されている項目と同様である。また、図４（ｂ）と同様に、アプリ情報ヒープダンプには、標準ヒープダンプに記載されたオブジェクトのうち、ユーザに指定されたアプリ１１ｎのオブジェクト情報も記載されている。異なる点として、第三の実施形態に係るアプリ情報ヒープダンプには、システムや他のアプリの公開可能なオブジェクト情報が追加で記載されている。
【００７６】
例えば、アプリの開発のために公開されているような、画像形成装置１００の基本的な機能を利用するためのオブジェクト情報や、画像形成装置１００の設定値を保持するオブジェクト情報などが記載されている。これらの公開されているオブジェクト（以下、公開オブジェクトと称する）の情報は、必ずしもユーザに指定されたアプリのオブジェクト情報でなくてもよく、システムのオブジェクト情報でもよい。第三の実施形態に係るアプリ情報ヒープダンプに記載されたこれらの公開オブジェクトのオブジェクト情報により、ユーザは、画像形成装置１００内のシステムや、あるいは他のアプリの公開情報を知ることができる。
【００７７】
［処理フロー］
図９Ａは、ダンプ分割モジュール３０６がアプリ情報ヒープダンプを作成する処理の流れを模式的に表すフローチャートである。なお、第１の実施形態にて述べた図５Ａ、図５Ｂの処理と重複する工程については、同じ参照番号を付し、詳細な説明は省略する。
【００７８】
ユーザがダンプ出力命令を行うと、Ｓ９００１にて、ダンプ分割モジュール３０６は、その入力を検知する。例えば、ユーザは、ユーザインタフェース部２０１、もしくは、情報処理装置１０１などを通してダンプ出力命令の入力を行うことができる。ユーザはここで、どのアプリのダンプを出力するかを、アプリ情報を入力することで指定する。更に、ユーザは、どの公開オブジェクトのオブジェクト情報をアプリ情報ヒープダンプに含めるか、ソースコード（以降、公開ソースコードと呼ぶ）を入力することで指定する。従って、ダンプ分割モジュール３０６は、ダンプ出力命令を検知するとともに、ユーザが指定したアプリ１１ｎの情報および公開ソースコードも取得する。ここで取得するアプリ１１ｎの情報としては、例えば、アプリ１１ｎごとに割り当てられているアプリＩＤがある。なお、ダンプ分割モジュール３０６がアプリ１１ｎを一意に特定できる識別情報であれば、アプリのプログラム、アプリ名など他の情報でもよい。特に、アプリ１１ｎのプログラムなど、そのアプリ１１ｎの開発者しか知り得ない情報は、より好ましい。アプリの識別情報が開発者しか知り得ない情報であれば、アプリ情報ヒープダンプもそのアプリ１１ｎの開発者しか入手できなくなるため、第三者によってそのアプリ１１ｎを解析される可能性が減る。
【００７９】
このとき、ダンプ分割モジュール３０６は、ユーザからの入力を取得すると同時に、アプリ１１ｎのプログラムが正しい情報か否かを判定する必要もある。これは、第三者がアプリ１１ｎのプログラムを偽造してアプリ情報ヒープダンプを取得しようとする可能性があるためである。判定する例としては、ユーザが入力したアプリ１１ｎのプログラムと、記憶装置２０２に記憶された実行ファイル、もしくはｊａｖａ実行環境３０１が実行しているプログラムの比較を行って判定する方法がある。
【００８０】
更に、ダンプ分割モジュール３０６は、公開ソースコードを取得する。この公開ソースコードは、アプリ開発者に公開されているシステムのソースコードや、他のアプリのソースコードである。ここでは簡単な例としてソースコードとしているが、バイナリとしてユーザが入力して、ダンプ分割モジュール３０６がそのバイナリを取得してもよい。
【００８１】
Ｓ５００２〜Ｓ５００８、Ｓ５０１０、およびＳ５０１１は、図５Ａに示した処理と同様である。Ｓ５００４で取得したアプリクラスローダ３０５ｎの情報が標準ヒープダンプに記載されている場合（Ｓ５００５にてＹＥＳ）Ｓ９００２へ処理を進める。もしくは、ユーザに指定されたアプリ１１ｎに対応するアプリクラスローダ３０５ｎを取得した後（Ｓ５００８）Ｓ９００２へ処理を進める。
【００８２】
Ｓ９００２にて、ダンプ分割モジュール３０６は、Ｓ９００１で取得した公開ソースコード内の公開可能なオブジェクト情報も記載したアプリ情報ヒープダンプを作成する。ここでの詳細な処理は図９Ｂを用いて説明する。アプリ情報ヒープダンプの作成が完了するとＳ５０１０へ処理を進める。
【００８３】
（アプリ情報ヒープダンプ作成処理）
図９Ｂは、図９ＡのＳ９００２の工程における、本実施形態に係るアプリ情報ヒープダンプを作成する処理の流れを模式的に表すフローチャートである。
【００８４】
Ｓ５１０１〜Ｓ５１０６は図５Ｂで示した処理と同じである。Ｓ５１０２で取得したクラスローダ情報４０４が、図９ＡのＳ５００４あるいはＳ５００８で取得したクラスローダ情報と一致しなかった場合に（Ｓ５１０３にてＮＯ）、Ｓ９１０１へ処理を進める。
【００８５】
Ｓ９１０１にて、ダンプ分割モジュール３０６は、調査オブジェクトのクラスがユーザに指定された公開ソースコードに含まれているクラスか否かを判定する。ここの公開ソースコードは、図９ＡのＳ９００１で取得した公開ソースコードである。調査オブジェクトのクラスが公開ソースコードに含まれる場合は（Ｓ９１０１にてＹＥＳ）Ｓ９１０２へ処理を進め、含まれない場合は（Ｓ９１０１にてＮＯ）Ｓ５１０５へ処理を進める。
【００８６】
Ｓ９１０２にて、ダンプ分割モジュール３０６は、調査オブジェクトのクラスのアクセス修飾子を、公開ソースコードから取得する。アクセス修飾子には、一般に、ソースコードやバイナリ内にある各クラス、クラス内の各メンバ、クラス内の各メソッド、クラス内の各コンストラクタにそれぞれ定義されている。本実施形態では、この中の内、調査オブジェクトに対応するクラスに定義されたアクセス修飾子を、ダンプ分割モジュール３０６が取得する。
【００８７】
Ｓ９１０３にて、ダンプ分割モジュール３０６は、Ｓ９１０２で取得したアクセス修飾子が所定のアクセス修飾子であるか否かを判定する。一般に、アクセス修飾子の定義の種類には、“ｐｒｉｖａｔｅ”、“ｐｒｏｔｅｃｔｅｄ”、“ｐｕｂｌｉｃ”、定義なし、の４つがある。このうち、“ｐｒｉｖａｔｅ”、“ｐｒｏｔｅｃｔｅｄ”、定義なし、の３つは、アクセスが制限され、そのクラスのオブジェクトを持つモジュール以外には公開されていない。一方、“ｐｕｂｌｉｃ”は、アクセスの制限がなされておらず、そのクラスのオブジェクトを持つモジュール以外にも公開されている。ここでの所定のアクセス修飾子は、アクセス制限がなされていない“ｐｕｂｌｉｃ”であるとする。例えば、システムのオブジェクトのアクセス修飾子が“ｐｕｂｌｉｃ”であれば、そのオブジェクトをアプリ１１ｎから参照することが可能である。また、あるアプリ１１ｎのオブジェクトのアクセス修飾子が“ｐｕｂｌｉｃ”であれば、そのオブジェクトを他のアプリ１１ｎから参照することが可能である。Ｓ９１０２で取得したアクセス修飾子が“ｐｕｂｌｉｃ”である場合は（Ｓ９１０３にてＹＥＳ）Ｓ９１０４に処理を進め、“ｐｕｂｌｉｃ”以外である場合は（Ｓ９１０３にてＮＯ）Ｓ５１０５へ処理を進める。
【００８８】
Ｓ９１０４にて、ダンプ分割モジュール３０６は、Ｊａｖａ実行環境３０１とアプリ管理フレームワーク３０２が動作可能な状態か否かを判定する。以降の処理において、ダンプ分割モジュール３０６は、画像形成装置１００内で動作するクラスのアクセス修飾子が“ｐｕｂｌｉｃ”となっているか否かを、Ｊａｖａ実行環境３０１もしくはアプリ管理フレームワーク３０２に問い合わせて確認する。そのため、ここでＪａｖａ実行環境３０１とアプリ管理フレームワーク３０２が動作可能な状態か否かを判定する。システムが動作可能な状態であれば（Ｓ９１０４にてＹＥＳ）Ｓ９１０５に処理を進め、動作できない状態であれば（Ｓ９１０４にてＮＯ）Ｓ５１０５に処理を進める。なお、調査オブジェクトのクラスがシステムクラスローダ３０４によってロードされているクラスであり、かつ少なくともＪａｖａ実行環境３０１が動作可能な状態である場合、ダンプ分割モジュール３０６は、システムは動作可能であると判定し、Ｓ９１０５へ処理を進める。これはクラスのアクセス修飾子が“ｐｕｂｌｉｃ”となっているか否かを、ダンプ分割モジュール３０６がＪａｖａ実行環境３０１だけに問い合わせして確認するためである。
【００８９】
Ｓ９１０５にて、ダンプ分割モジュール３０６は、調査オブジェクトに対するクラスのアクセス修飾子が、画像形成装置１００内で“ｐｕｂｌｉｃ”となっているか否かを判定する。クラスのアクセス修飾子が“ｐｕｂｌｉｃ”となっているか否かはシステムクラスローダ３０４もしくはアプリクラスローダ３０５ｎが知っている。そのため、ダンプ分割モジュール３０６は、Ｊａｖａ実行環境３０１もしくはアプリ管理フレームワーク３０２に問い合わせることにより、クラスのアクセス修飾子が“ｐｕｂｌｉｃ”か否かを判定することができる。“ｐｕｂｌｉｃ”と判定した場合は（Ｓ９１０５にてＹＥＳ）、Ｓ９１０６へ処理を進め、“ｐｕｂｌｉｃ”以外であった場合は（Ｓ９１０５にてＮＯ）Ｓ５１０５へ処理を進める。
【００９０】
Ｓ９１０６にて、ダンプ分割モジュール３０６は、調査オブジェクトの情報をアプリ情報ヒープダンプに追加で記載する。記載が完了した後、ダンプ分割モジュール３０６はＳ５１０５に処理を進める。
【００９１】
以上、第三の実施形態では、ダンプ分割モジュール３０６は、ユーザに指定されたアプリ１１ｎのオブジェクト情報をアプリ情報ヒープダンプに記載して出力する。更に、ダンプ分割モジュール３０６は、公開ソースコード上と画像形成装置１００のシステム上の両方で、“ｐｕｂｌｉｃ”となっているクラスのオブジェクト情報もアプリ情報ヒープダンプに記載して出力する。ここで、公開ソースコード上と画像形成装置１００のシステム上とで、“ｐｕｂｌｉｃ”であるかを確認するのは（Ｓ９１０３およびＳ９１０５）、セキュリティ面の脆弱性を除外するためである。例えば、ユーザに提供されているシステムのソースコード上で、あるクラスのアクセス修飾子が“ｐｒｉｖａｔｅ”であっても、ユーザは“ｐｕｂｌｉｃ”に改ざんして公開ソースコードとして、指定する可能性がある。言い換えれば、ユーザはソースコード上のアクセス修飾子を改ざんすることで、不正に画像形成装置１００の機密情報を取得できてしまう。そのため、ダンプ分割モジュール３０６は、公開ソースコード上と画像形成装置１００内で実際に動作しているシステム上の両方において、アクセス修飾子が“ｐｕｂｌｉｃ”となっているクラスのオブジェクト情報をアプリ情報ヒープダンプに記載する。
【００９２】
なお、ユーザが信頼できる開発者であれば、ダンプ分割モジュール３０６は、公開ソースコード上のみを確認して、アクセス修飾子が“ｐｕｂｌｉｃ”となっているクラスのオブジェクト情報をアプリ情報ヒープダンプに記載するようにしてもよい。この構成より、画像形成装置１００のシステムが動作できない状態でも、ダンプ分割モジュール３０６は、公開可能な情報をアプリ情報ヒープダンプに記載することができる。そのため、ユーザは画像形成装置１００のシステムが動作できない状態でも、公開可能な情報をアプリ情報ヒープダンプから知ることができる。
【００９３】
また、ダンプ分割モジュール３０６が公開ソースコード上で“ｐｕｂｌｉｃ”となっているかを確認するのには、２つの理由がある。１つ目の理由が、ユーザにアクセス修飾子が“ｐｕｂｌｉｃ”となっているクラスを公開しても良いかをダンプ分割モジュール３０６が判断するためである。ユーザにシステムのソースコードが提供されているのであれば、そのユーザはアプリの開発者であるため、アクセス修飾子が“ｐｕｂｌｉｃ”となっているクラスを公開しても良いと判断できる。２つ目の理由は、ユーザにとって不要なオブジェクト情報をダンプ分割モジュール３０６がアプリ情報ヒープダンプに記載しないようにするためである。システム内やアプリ内の“ｐｕｂｌｉｃ”のクラスのオブジェクト情報をすべてアプリ情報ヒープダンプに記載すると、情報量が膨大となってしまい開発者の分析の妨げになることがある。ユーザが信頼できる開発者であり、かつ、膨大な情報量のアプリ情報ヒープダンプを解析できるようであれば、ダンプ分割モジュール３０６は画像形成装置１００内のシステム上のみアクセス修飾子の確認を行うようにしてもよい。これにより、ユーザは公開ソースコードを指定しなくても、公開可能な情報をアプリ情報ヒープダンプから取得することができる。
【００９４】
以上、第三の実施形態では、ダンプ分割モジュール３０６が、ユーザに指定されたアプリのオブジェクト情報に加えて、システム上（もしくは他のアプリ）で効果可能なオブジェクトの情報もアプリ情報ヒープダンプに記載する。このアプリ情報ヒープダンプにより、ユーザはアプリ以外の公開可能なオブジェクト情報も知ることができるようになる。
【００９５】
＜その他の実施形態＞
上記、３つの実施形態について説明したが、例えば、ユーザは、ダンプ分割モジュール３０６の画面（不図示）を介して、第１〜第３の実施形態のアプリ情報ヒープダンプのうち、いずれの構成の出力を行うかを選択できるようにしてもよい。これにより、ユーザは必要な情報のみを含むアプリ情報ヒープダンプを出力できる。
【００９６】
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００９７】
１００  画像形成装置、１０１  情報処理装置、１１０  アプリケーション、１２０  ネットワーク、３０１  Ｊａｖａ実行環境、３０２  アプリ管理フレームワーク、３０４  システムクラスローダ、３０５  アプリクラスローダ、３０６  ダンプ分割モジュール
【図１】
2018060472.tif 000003
【図２】
2018060472.tif 000004
【図３】
2018060472.tif 000005
【図４】
2018060472.tif 000006
【図５Ａ】
2018060472.tif 000007
【図５Ｂ】
2018060472.tif 000008
【図６】
2018060472.tif 000009
【図７Ａ】
2018060472.tif 000010
【図７Ｂ】
2018060472.tif 000011
【図８】
2018060472.tif 000012
【図９Ａ】
2018060472.tif 000013
【図９Ｂ】
2018060472.tif 000014