The steps to reproduce... without this, many bugs are hard to solve. Short of this, a screenshot or two where the bug is happening, if that's possible. Many bugs can be narrowed down just by a screenshot.
If you have them, review logs to see if anything is showing up there that is out of the ordinary.
Debugger, or if that's not possible, adding logging or console output to the code. Sometimes, narrowing it down is as simple as adding "trace 1", "trace 2", "trace 3", etc. through the lines of code to see how far the traces go in order to narrow down the actual line causing the issue.
Often times, the culprit is in the data. So, I'll throw "same data" into the mix. I had one just today where a third-party database changed a column from an int to a varchar sometime in the last two years on a rarely-used column. The code expected an int value, so when a value with alpha showed up, it threw an exception. The odd thing was that it worked perfectly fine on my machine. It wasn't until I replicated the data exactly as they had it that the issue appeared. It took about two hours to figure this one out. Because it was on a client system, I didn't have the option of debugging or console logging, so data replication to my own system and then debugging was the course of action to take. The problem showed up during the data replication, so I didn't even need to debug as I figured out right at that point what the problem was. The fix took just moments to change the data type expected in the code.