14.3 OS 認識 API の実装

OS 認識 API は、特定の時間にデバッガが実行するコールバックで構成されています。デバッガは各コールバックに対して、ターゲットに関する情報を取得するための実装の手段を提供し、式エバリュエータを通じて変数とポインタを解決します。

API は、デバッガ自体が Java で書かれているため、主に Java インタフェースとして存在します。ただし、デバッガは、Python と Java の間でコールを変換するために Python インタープリタとバインドを提供するため、Java インタフェースは Python スクリプトによって実装できます。このセクションと次のセクションでは、Java インタフェースを扱いますが、拡張機能を Python で実装する方法について説明します。

注:

Python での実装では、Java での実装とは異なり、特にビルド環境やコンパイル環境が必要ありません。それに対して、Python コード内で問題を調査する方が難しく、独自の Python の実装を書き始める前に「プログラミングのアドバイスと重要な情報」セクションを参照することをお勧めします。

実装する詳細な Java インタフェースは、DS-5 インストールフォルダの sw/eclipse/dropins/plugins 内の com.arm.debug.extension.source_<version>.jar ファイルにあります。

注:

Java インタフェースに関する Javadoc 文書を参照することをお勧めします。本書にはない重要な情報が記載されています。

現時点でまず関心がある Java インタフェースは、com.arm.debug.extension.os パッケージの IOSProvider です。このインタフェースは、extension.xmltodo コメントとともに、孤立したプロバイダインスタンスによって実装する必要があります。

まず、コンフィギュレーションデータベースエントリに最も簡単な実装を追加します。

<some folder>
    /mydb
        /OS
            /myos
                /extension.xml
                /messages.properties
                /provider.py
  • extension.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <os id="myos" version="5.15" xmlns="http://www.arm.com/os_extension">
        <name>myos.title</name>
        <description>myos.desc</description>
        <provider>provider.py</provider>
    </os>
  • provider.py
    # this script implements the Java interface IOSProvider
    def areOSSymbolsLoaded(debugger):
        return False
    
    def isOSInitialised(debugger):
        return False
    
    def getOSContextProvider():
        return None
    
    def getDataModel():
        return None

OS 認識の実装を有効にするには、これで十分です。これによってプレーンベアメタル接続の上に追加されるものはありませんが、選択されたこの OS 認識のデバッグコンフィギュレーションが機能します。ただし、これは OS 認識の論理ライフサイクルを示します。

  1. OS のデバッグ情報が入手可能であることを確認します。シンボルのロード時に、デバッガで areOSSymbolsLoaded(); が呼び出され、シンボルが OS に属していると認識された場合、実装によって True が返され、次のコールバックが有効になります。
  2. OS が初期化されていることを確認します。OS のシンボルが使用可能になると、ターゲットが停止した場合またはターゲットが次に停止した場合に、デバッガはすぐに isOSInitialised(), を呼び出します。これにより、スレッドとその他のデータ構造を読み取る準備ができた状態に OS が達したことを認識機能の実装で確認することができます。
  3. スレッドとその他のデータ構造に関する情報を取得します。OS が初期化されると、デバッガは getOSContextProvider() および getDataModel() を呼び出して、ターゲットからの情報を読み取ります。実際に、デバッガは getOSContextProvider() および getDataModel() を先に呼び出す可能性がありますが、areOSSymbolsLoaded()isOSInitialised() の両方が True を返すまでは、返されたオブジェクトを使用してターゲットから読み取ることはありません。
非機密扱いPDF file icon PDF 版ARM DUI0446ZJ
Copyright © 2010–2016 ARM.All rights reserved.