adrianstone55 / SymbolSort

A Utility for Measuring C++ Code Bloat
http://gameangst.com/?p=320
Apache License 2.0
119 stars 17 forks source link

Crash when using -diff on Chrome #8

Closed randomascii closed 6 years ago

randomascii commented 7 years ago

I hit the following crash when trying to compare two Chrome PDBs:

Loading symbols from old_06ef945\chrome.dll.pdb Reading section info... Reading source file info... Reading global function symbols... 100% complete Reading thunk symbols... 100% complete Reading private data symbols... 100% complete Reading global data symbols... 100% complete Subtracting overlapping symbols... 100

Loading symbols from new_bb2dd59\chrome.dll.pdb Reading section info... Reading source file info... Reading global function symbols... 3% complete Unhandled Exception: System.ArgumentException: Value does not fall within the expected range. at Dia2Lib.IDiaLineNumber.get_sourceFile() at SymbolSort.SymbolSort.FindSourceFileForRVA(IDiaSession session, UInt32 rva, UInt32 rvaLength) at SymbolSort.SymbolSort.ReadSymbolsFromScope(IDiaSymbol parent, SymTagEnum type, SymbolFlags additionalFlags, UInt32 startPercent, UInt32 endPercent, IDiaSession diaSession, List1 sectionContribs, Dictionary2 compilandFileMap, List1 symbols) at SymbolSort.SymbolSort.ReadSymbolsFromPDB(List1 symbols, String filename, String searchPath, Options options) at SymbolSort.SymbolSort.LoadSymbols(InputFile inputFile, List`1 symbols, String searchPath, Options options) at SymbolSort.SymbolSort.Main(String[] args)

I tried debugging it but the VS debugger seems to default to launching Any CPU C# programs as 32-bit which lead to a quick out-of-memory crash. Running the debug x64 version under the debugger worked correctly. So, this isn't a very useful bug report but I thought I'd put it out there anyway.

randomascii commented 7 years ago

On the subsequent two runs under the debugger the -diff command ran and produced useful results. So. Huh. Tough to diagnose a bug that only happens once, not under a debugger.

adrianstone55 commented 7 years ago

I don't know if it is related to the crash, but I support your decision to switch to x64 instead of Any CPU. Since the COM assembly has been registered as x64 and the interop DLL is generated from that, I'm suspicious of any behavior that happens when the application launches in x86 mode.