Visual Studio freezes when debugging with FMOD installed

If I enable debugging with Visual Studio + Unity (2017), the moment I hit a breakpoint, Unity freezes and I have to do a forced restart. If I delete FMOD from the project everything works fine.

I found this piece of information in the VS documentation that MIGHT be the way to fix it:

Several Unity plugins like Parse, FMOD, UMP (Universal Media Player), ZFBrowser or Embedded Browser are using native threads. It’s an issue when a plugin ends up attaching a native thread to the runtime, which then does blocking calls to the OS. This means Unity can’t interrupt that thread for the debugger (or domain reload) and hang.

For FMOD, there is a workaround, you can pass FMOD_STUDIO_INIT_SYNCHRONOUS_UPDATE initialization flag to disable asynchronous processing and perform all processing on the main thread.

Unfortunately, I have no idea where in my code I should be setting up the FMOD_STUDIO_INIT_SYNCHRONOUS_UPDATE flag…

So if that is the issue :

  1. How do I change that flag during initialization (when is that exactly?)?
  2. What is the right way to pass the value using the FMOD.Studio.System.initialize()?

And if the issue is something different, any suggestions/help?

Unfortunately this has been an issue for some time now when trying to debug native callbacks.

You can add that flag to the studioInitFlags found in the RuntimeManager.cs Initialize().

FMOD.Studio.INITFLAGS studioInitFlags = ... | FMOD_STUDIO_INIT_SYNCHRONOUS_UPDATE;
2 Likes

Kinda what I suspected, thanks @Cameron. This is what I ended up doing so it works in the editor and I can still have it work in a exported build:
`
FMOD.Studio.INITFLAGS studioInitFlags;

#if UNITY_EDITOR
//FIX FOR CRASHES
studioInitFlags = FMOD.Studio.INITFLAGS.SYNCHRONOUS_UPDATE;
#else
//ORIGINAL LINE
studioInitFlags = FMOD.Studio.INITFLAGS.NORMAL | FMOD.Studio.INITFLAGS.DEFERRED_CALLBACKS;
#endif
`

I wonder if it will ever be properly fixed…

1 Like

Wow, thanks for this question and answer here. I’ve lost a whole day just trying to find what was wrong, until I realized we only had this issue on scenes where there was music going on. Changing this flag solved the problem for us too.

For future reference, if using the latest Unity version (2018.2.xx), since the code changed slightly, this is the line I now add to the RuntimeManager.cs:

#if UNITY_EDITOR
	//FIX FOR CRASHES
	studioInitFlags = FMOD.Studio.INITFLAGS.SYNCHRONOUS_UPDATE;
#endif

It should go right after this line, under the Initialize() method:

FMOD.Studio.INITFLAGS studioInitFlags = FMOD.Studio.INITFLAGS.NORMAL | FMOD.Studio.INITFLAGS.DEFERRED_CALLBACKS;