Changes between Version 1 and 1.1 of the framework

The changes to the low level APIs between version 1 and 1.1 are minor, with only a few new features being added. The documentation has been updated to take into account the symbol engine changes.

Profiling

There are no profiling API changes.

Debugging

The debugging APIs remain unchanged.

Symbol Engine

There seems to be a major change to the symbol engine for security purposes where pdb files can now only be opened from the same location as the EXE using the old interfaces. New interfaces have been supplied to provide the functionality for searching in different locations. I haven't investigated this yet.

The symbol engine has acquired three new interfaces, ISymUnmanagedBinder2, ISymUnmangedWriter2 and ISymUnmanagedDispose. The only existing interface to change is ISymUnmanagedWriter, which has been extended with a new method. There are also some new CLSIDs called CLSID_CorSymReader_SxS, CLSID_CorSymWriter_SxS and CLSID_CorSymBinder_SxS, which are side by side install support. If you are running under 1.1 of the framework you should CoCreateInstance against the _SxS CLSIDs, but if you wish to be able to run on a 1.0 only system then you need to have code to handle a failure on these interfaces and try to create against the old CLSID instead.

ISymUnmanagedWriter

This interface has been extended with an Abort member, which when called closes the writer without actually committing the data to the symbol store. The GUID for this interface has also been changed. The old interface doesn't seem to be listed in the new header files.

ICorUnmanagedBinder2

This interface provides one new method, GetReaderForFile2, over the original ICorUmanagedBinder interface. This is an improved version of GetReaderForFile that allows you to control which locations will searched for debugging information. Using this method you can control which of the following locations are searched: paths listed in the registry, the symbol server, the original compile location and the current location of the executable. This member could be used to speed up module loading for situations such as laptops that may have lost access to their symbol server, or are running on a dial up network part of the time.

ICorUnmanagedWriter2

Three new members have been added through this interface: DefineLocalVariable2, DefineGlobalVariable2 and DefineConstant2. These new members allow you to supply tokens for the signatures instead of char arrays.

ISymUnmanagedDispose

Contains one method, Destroy. Don't know why this exists when Release() would seem to already do the work of this. Probably have to QI for it. It may be there to help the managed versions call these versions. This interface is not documented in DebugRef.doc