An effective method in these cases (although not necessarily straightforward) is to use differential debugging.
The core principle is to run the application twice and record traces of the functions being executed, or even basic blocks if you need to get so granular.
The idea boils down to:
- The first time you record a trace try to exercise as much functionality as possible, except what you are interested in (in your case, do not press that button!).
The second time you go directly for what you are interested in, press that button!
Now you can filter the noise out of the second trace by looking for hits that appear exclusively in the second (and not in the first)
This is not a perfect method but it works pretty well to narrow the search in several scenarios.
Here a link to my blog where I discuss a similar (in nature) problem. There is even some old code to get you started.