bombomby / optick

C++ Profiler For Games
https://optick.dev
MIT License
2.95k stars 296 forks source link

Optick unable to resolve function names when using "/DEBUG:FASTLINK" #69

Closed galop1n closed 5 years ago

galop1n commented 5 years ago

When your application link with "/DEBUG:FASTLINK" instead of "/DEBUG:FULL", Optick address resolving step takes a lot more time, but at the end, does not resolve any function names in the flame graph. Switching to "/DEBUG:FULL" and Optick is able to resolve them just fine, and faster.

An option to see the loaded or missing symbols and proceed with a reload would be useful also, like in Visual Studio.

bombomby commented 5 years ago

Optick uses DbgHelp.dll for symbol resolving. Unfortunatelly Microsoft haven't upgraded DbgHelp.dll that they supply with Windows and Windows SDK yet. As a temporary workaround you could copy the latest version of DbgHelp.dll from the Visual Studio folder next your game executable. You need at least "10.0.17625.1000" product version (the more - the better :)): DbgHelp The similar problem is discussed here: https://developercommunity.visualstudio.com/content/problem/36255/chromes-base-unittests-fails-with-vs-2017-due-to-s.html

You could also disable callstacks collection if you don't need them - just untick "Autosampling" and "SysCalls" options in the menu before taking a capture: AutosamplingSettings

Please let me know whether using new version of DbgHelp.dll fixes the problem once you have a chance to try it.

I am planning to move Symbol Resolving from the Runtime to the GUI side soon - check https://github.com/bombomby/optick/issues/54 for more details. It will allow to resolve symbols on demand which will significantly improve performance of the "resolving" step. It will also allow you to provide a custom path to the DbgHelp.dll so you don't need to keep this dll next to your executable.

bombomby commented 5 years ago

Closing for now. Let me know if the problem still occurs after copying the new DbgHelp.dll.