=== 6.14.1.2 The method_debug_info Structure === The **method_debug_info** structure describes a method of a class. It can describe methods that are either virtual or non-virtual (static or initialization methods). The structure is defined as follows: The items in the **method_debug_info** structure are defined as follows: **name_index** Contains an index into the ****strings_table[****] item of the **debug_component** structure. The ****strings_table[****] entry at the indexed location must be the simple (meaning, not fully-qualified) name of the method (for example, "**lookupAID**"). **descriptor_index** Contains an index into the ****strings_table[]**** item of the **debug_component** structure. The ****strings_table[]**** entry at the indexed location must be the argument and return types of the method (meaning, the signature without the method name). Class types are fully-qualified (for example, "**([BSB)Ljavacard/framework/AID**;") **access_flags** A two-byte mask of modifiers that apply to this method. Modifier Value **ACC_PUBLIC** **0x0001** **ACC_PRIVATE** **0x0002** **ACC_PROTECTED** **0x0004** **ACC_STATIC** **0x0008** **ACC_FINAL** **0x0010** **ACC_NATIVE** **0x0100** **ACC_ABSTRACT** **0x0400** The **ACC_NATIVE** flag is only valid for methods of a package located in the card mask. It cannot be used for methods contained in a CAP file. All other method access and modifier flags are defined in the same way and with the same restrictions as described in The Java Virtual Machine Specification. **location** A byte offset of the **method_info** structure for this method into the info item of the Method Component ([[6.9_Method Component| Section 6.9, Method Component]]). Abstract methods have a location of zero. **header_size** The size in bytes of the header of the method. Abstract methods have a **header_size** of zero. **body_size** The size in bytes of the body of the method, not including the method header. Abstract methods have a **body_size** of zero. **variable_count** The number of **variable_info** entries in the **variable_table[]** item. Abstract methods have a **variable_count** of zero. **line_count** The number of **line_info** entries in the **line_table[]** item. Abstract methods have a **line_count** of zero. **variable_table[]** Contains the **variable_info** structures for all variables in this method. The **variable_info** structure describes a single local variable of a method. It indicates the index into the local variables of the current frame at which the local variable can be found, as well as the name and type of the variable. It also indicates the range of bytecodes within which the variable has a value. The items in the **variable_info** structure are defined as follows: ** index** The index of the variable in the local stack frame, as used in load and store bytecodes. If the variable at index is of type **int**, it occupies both index and index + 1. ** name_index** Contains an index into the ****strings_table[****] item of the debug_component structure. The ****strings_table[****] entry at the indexed location must be the name of the local variable, (for example, "**applets**"). ** descriptor_index** Contains an index into the ****strings_table[**]** item of the **debug_component** structure. The **strings_table[**] entry at the indexed location must be the type of the local variable. Class types are fully-qualified (for example, **"[Ljavacard/framework/Applet;")**. ** start_pc** The index of the first bytecode in which the variable is in-scope and valid. ** length** Number of bytecodes in which the variable is in-scope and valid. The value of **start_pc + length** will be either the index of the next bytecode after the valid range, or the first index beyond the end of the bytecode array. **line_table[]** Contains the **line_info** structures that map bytecode instructions of this method to lines in the class's source file. Each **line_info** item represents a mapping of a range of bytecode instructions to a particular line in the source file that contains the method. The range of instructions is from ****start_pc**** to ****end_pc****, inclusive. ****start_pc**** and ****end_pc**** represent a zero-based byte offset within the method. The **source_line** is the one-based line number in the source file. The structure is defined as follows: The items in the **line_info** structure are defined as follows: ** start_pc** The byte offset of the first bytecode in the range of instructions. ** end_pc** The byte offset of the last operand of the last bytecode in the range of instructions. ** source_line** Line number in the source file. Copyright © 2005, Sun Microsystems, Inc. All Rights Reserved.