Nowadays whenever a previously working setup starts to misbehave, I don't even bother to read logs or anything like that first. Driver quality etc. is today so good that most of the sudden death -bugs have been ironed out and some hardware thing is more likely than a software bug. And even the most perfect code cannot fight against physical problems.
Some time ago my laptop started to act strangely. While watching a movie or compiling code or doing anything even relatively CPU intensive, everything suddenly got a lot slower. Moving windows took anything between 1-15 seconds. CPU frequency dropped from 2 GHz to 800 MHz and decided to stay there. Even the idle temperature was around +60C. Every now and then the whole thing did lock up.
After cleaning up the dust inside the laptop things got back to normal. Idle temperature +35-40C, no slowdowns.
OK, that one was a quite straightforward to trace due the heat and due the excessive amount of dust inside the laptop. :-)
If something more tricky pops up, I usually first let memtest86 run overnight and see if that gives me any results. If it doesn't, I fire up cpuburn or some similar program and see if that makes my computer to crash. If that doesn't help, I move on to torturing the hard disk with bonnie++ or iozone and see if that crashes something. Then I move on to 3D tests, such as playing PPRacer.
If I'm unable to get a controlled crash after all those tests, I move on to examining for more obscure stuff. Perhaps USB autosuspend is to blame? Or something even more odd.
In one case the computer did lock up every time a webcam software was started. After spending way too much time in configuring kernel parameters and so on, lsusb revealed something embarrassing. The webcam was connected to a USB 1.1 port instead of USB 2.0 port. After connecting the cam to USB 2.0 port it started to work.