As a first step you should try capturing a crash dump for such 'random app crashes in production'. Dr Watson can help you get a crash dump. If you can get the crash dump, then you can at least point out where and why the program crashed.

If that is not possible, then I would look at log files, if I have sufficient logs, to see what the software was doing just before the crash. That helps narrow down the piece of code where the crash is happening and possibly by reading through the code one can find the source of the error.

If that fails, then I would try to repro it in my dev machine, where hopefully my dev tools (debugger) would catch the location of error when the crash happens.

Finding the location of the crash is one thing; with many such crashes the root cause of the error is somewhere else. e.g. a NULL pointer may not cause a crash at the point where the pointer is made null, but may be somewhere else. So then it is a bit of detective work to find the root cause. If you can catch it in debugger, then at times the call stack trace would give you sufficient information.