The module field in `LF_UDT_MOD_SRC_LINE` should be `unsigned short` instead of `string` as per:
```
typedef struct lfUdtModSrcLine {
unsigned short leaf; // LF_UDT_MOD_SRC_LINE
CV_typ_t type; // UDT's type index
CV_ItemId src; // index into string table where source file name is saved
unsigned long line; // line number
unsigned short imod; // module that contributes this UDT definition
} lfUdtModSrcLine;
```
([source](https://github.com/microsoft/microsoft-pdb/blob/082c5290e5aff028ae84e43affa8be717aa7af73/include/cvinfo.h#L1707))
This also changes the size of the struct from 16 to 14.
The linux/mac stackers are more accurate (based on banners) than the
windows stacker (based on offsets). As such in cases where both would
match, we should go for the more accurate match first (linux/mac) over
windows. In most cases this will make no difference because of the
exclusion lists, so only one stacker will run, but in cases such as
volshell where all stackers are run, this may help with certain edge
cases.
It appears in issue #524 that the step to fulfil symbol requirements
can throw an exception (which then prevents the kernel_virtual_offset
(which is optional) from being set appropriately.
This sets the kvo first and adds a check to where it's set. It doesn't
get to the root of why an exception is thrown, but should ensure it's
easier to spot if it goes wrong.
Fixes#524.
It looks like some copypasta snuck in the manual pdb.json.
The offsets for the LF_UDT_SRC_LINE as was the total structure size for
LF_UDT_MOD_SRC_LINE.
Fixes#527
As per https://docs.python.org/3/tutorial/classes.html#private-variables
Python will mangle private attribute names from `__attrname` to `_classname__attrname` to avoid name clashes of names with names defined by subclasses.
This will happen even if subclasses are not involved i.e.: calling `type_member.__foo` from a plugin classmethod.
Note that `__foo` is not meant to be a Python private attribute, but the actual name of the type member.
Like sock.__sk_common here: https://github.com/torvalds/linux/blob/62fb9874f5da54fdb243003b386128037319b219/include/net/sock.h#L354
We need to strip the '_classname' prefix from the attribute's name before continuing with the member attribute lookup.