定义映射布局

注: 映射布局 DTD 和样本 XML 映射可在 <product install directory>\eclipse\plugins\com.ibm.debug.memorymap_<version>\sample\ 中获得。

以下示例定义 z/OS® 上以下 C 语言结构的布局:

typedef struct {
  char char_val;
  unsigned short ushort_val;
  short short_val;
  unsigned long ulong_val;
  long long_val;
  char string_val[32];
} _test;

创建布局 XML 文件

在 layout.dtd 文档类型定义(DTD)文件中定义了 XML 文件格式,如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>
  <!ELEMENT LAYOUT (FIELD)+>
  <!ATTLIST LAYOUT Header CDATA #REQUIRED length CDATA
#REQUIRED>
  <!ELEMENT FIELD (FIELD)*>
  <!ATTLIST FIELD
     Header CDATA #REQUIRED
     Type
(16_BIT_INT|16_BIT_UINT|16_BIT_HINT|32_BIT_INT|32_BIT_UINT|32_BIT_HINT|32_BIT_FLOAT|64_BIT_INT|64_BIT_FLOAT|CHARACTER|HEX|ASCII|EBCDIC|STRUCTURE|PADDING|BIT|BITMASK|MAP)
#REQUIRED
     length CDATA #REQUIRED
     layout CDATA #IMPLIED>

这意味着 XML 布局文件将首先指定头(标题)和布局的总长度,接着是由头(名称)、长度和基本类型(它用来确定子元素的缺省表示)描述的子元素(字段)的列表。

还具有下列特殊的子元素类型:

用于描述 _test 结构的树形视图并且符合此格式的 XML 文件是:

<?xml version="1.0"?>
<!DOCTYPE LAYOUT SYSTEM "Layout.dtd" >
  <LAYOUT Header = "A Layout" length="17">
  <FIELD Header = "char_val" Type = "CHARACTER" length = "1"
> </FIELD>
  <FIELD Header = "ushort_val" Type = "16_BIT_UINT" length = "2"
> </FIELD>
  <FIELD Header = "short_val" Type = "16_BIT_INT" length = "2"
> </FIELD>
  <FIELD Header = "ulong_val" Type = "32_BIT_UINT" length = "4"
> </FIELD>
  <FIELD Header = "long_val" Type = "32_BIT_INT" length = "4"
> </FIELD>
  <FIELD Header = "string_val" Type = "ASCII" length = "32">
</FIELD>
</LAYOUT>
注: <!DOCTYPE LAYOUT SYSTEM "Layout.dtd" > 这一行指定使用哪个 DTD 文件来分析此文件的内容。如果 Layout.DTD 文件位于另一位置,则必须指定该位置的完整路径。

定义填充字段

如果您决定忽略 long_val 字段,但是想要在布局中显示 string_val 类型,则 XML 文件将为如下所示:

  <FIELD Header = "short_val" Type = "16_BIT_INT" length = "2"
> </FIELD>
  <FIELD Header = "ulong_val" Type = "32_BIT_UINT" length = "4"
> </FIELD>
  <FIELD Header = "" Type = "PADDING" length = "4" >
</FIELD>
  <FIELD Header = "string_val" Type = "ASCII" length = "32">
</FIELD>

定义 PADDING 子元素的最初目的是用于处理字节对齐的结构,但是,它还可以用来跳过不需要在布局中详细说明的数据区。

定义结构

以下 XML 片段说明如何使用 STRUCTURE 字段来映射嵌套结构。结构顶级元素没有相关联的值,可以展开它以显示其子元素。当将 STRUCTURE 字段的长度计入 XML 布局的总大小时,所包括的字段大小只用于显示目的。例如,以下结构表示只超过了总布局大小 344 个字节。

<FIELD Header = "MACHINE CHECK LOG OUT AREA" Type = "STRUCTURE"
length = "344" >
    <FIELD  Header="reserved" Type="HEX"
length="16"></FIELD>
    <FIELD Header="FLCSID" Type="HEX"
length="4"></FIELD>
    <FIELD Header="FLCIOFP" Type="HEX"
length="4"></FIELD>
    <FIELD Header="reserved" Type="HEX"
length="20"></FIELD>
    <FIELD Header="FLCESAR" Type="HEX"
length="4"></FIELD>
    <FIELD Header="FLCCTSA" Type="HEX"
length="8"></FIELD>
    <FIELD Header="FLCCCSA" Type="HEX"
length="8"></FIELD>
    <FIELD Header="FLCMCIC" Type="HEX"
length="8"></FIELD>
    <FIELD Header="reserved" Type="HEX"
length="8"></FIELD>
    <FIELD Header="FLCFSA" Type="HEX"
length="4"></FIELD>
    <FIELD Header="reserved" Type="HEX"
length="4"></FIELD>
    <FIELD Header="FLCFLA" Type="HEX"
length="16"></FIELD>
    <FIELD Header="FLCRV110" Type="HEX"
length="16"></FIELD>
    <FIELD Header="FLCARSAV" Type="STRUCTURE"length="64">
        <FIELD Header="AR0" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR1" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR2" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR3" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR4" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR5" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR6" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR7" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR8" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR9" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR10" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR11" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR12" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR13" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR14" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR15" Type="HEX"
length="4"></FIELD>
    </FIELD>
  <FIELD Header="FLCFPSAV" Type="HEX"
length="32"></FIELD>
  <FIELD Header="" Type="PADDING" length="64"></FIELD>
  <FIELD Header="" Type="PADDING" length="64"></FIELD>
  </FIELD>

定义位掩码字段

以下 XML 片段是用于描述 BITMASK 字段的一个样本。BITMASK 的长度是以字节为单位指定的,它包含一组 BIT 字段,其长度是以位为单位来指定的。对 BIT 字段显示的偏移是 BITMASK 字段中的位偏移。当将位掩码字段的长度计入 XML 布局的总大小时,各个 BIT 字段大小只用于显示目的。

<FIELD Header="byte_field" Type="BITMASK"length="2">
  <FIELD Header="hi_byte" Type="BIT"
length="8"></FIELD>
  <FIELD Header="lo_byte" Type="BIT"
length="8"></FIELD>
  </FIELD>

定义嵌套布局

同时利用 MAP 字段类型和可选的布局字段,可以描述嵌套布局,如以下 z/OS DSA 布局示例所示:

<?xml version="1.0"?>
<!DOCTYPE LAYOUT SYSTEM "Layout.dtd" >
<LAYOUT Header = "DSA" length="72">
<FIELD Header = "FLAGS" Type = "HEX" length =
"2"></FIELD>
<FIELD Header = "junk" Type = "HEX" length =
"2"></FIELD>
<FIELD Header = "Back Chain" Type = "MAP" length =
"4"layout="dsa.xml" ></FIELD>
<FIELD Header = "Forward Chain" Type = "MAP" length ="4"
layout="dsa.xml" ></FIELD>
<FIELD Header = "R14" Type = "HEX" length =
"4"></FIELD>
<FIELD Header = "R15" Type = "HEX" length =
"4"></FIELD>
<FIELD Header = "R0" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R1" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R2" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R3" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R4" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R5" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R6" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R7" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R8" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R9" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R10" Type = "HEX" length =
"4"></FIELD>
<FIELD Header = "R11" Type = "HEX" length =
"4"></FIELD>
<FIELD Header = "R12" Type = "HEX" length =
"4"></FIELD>
</LAYOUT>

此格式良好的 XML 布局存储在一个称为 DSA.XML 的文件中。由于您知道字段 3 和 4 包含指向不同 DSA 结构的指针,所以添加两个嵌套的布局定义。

注: 该布局的实际存储器映射实际上是在第一次展开布局元素时执行的,这样可以防止发生递归的布局扩展。
相关任务
映射内存
在“内存呈示”视图中按映射布局查看内存
设置内存映射位置
为表达式或变量映射内存
为寄存器映射内存
在“内存呈示”视图中编辑已映射的内存
从“内存呈示”视图中除去已映射的内存
添加多个存储器映射
使用条款 | 反馈
(C) Copyright IBM Corporation 2004, 2005. All Rights Reserved.