I am getting random crashes on my C++ application, it may not crash for a month, and then crash 10 times in a hour, and sometimes it may crash on launch, while sometimes it may
Start Logging. Put logging statements in places where you think the code flaky. focus on testing the code, and repeat until you narrow down the problem to a module or a function.
Put asserts everywhere!
While you are at it, Only put one expression in an assert.
Write a unit test for the code you think is failing. That way you can exercise the code in isolation from the rest of your runtime environment.
Write more automated tests that exercise the problematic code.
Do not add more code on top of the bad code that is failing. That's just a dumb idea.
Learn how to write out mini-dumps and do post-mortem debugging. It looks like others here have explained that quite well.
Exercise the bad code from as many different possible ways as you can to make you can isolate the bug.
Use a debug build. Run the debug build under the debugger if possible.
Trim down your application by removing binaries, modules etc... if possible so that you can have an easier time attempting to reproduce the bug.