Let\'s say you have a bug that was found in functional testing of a fairly complex part of the software.
It could stem from bad/unexpected data in the database, middle-tier cod
If you use a language that has generates a stack trace on exceptions start from there.
Get a copy of the original data that caused the problem if you can.
Use a good debugger.
If you have access to one there are things like the ODB for various languages that can be helpful by allowing you to fast forward or reverse through the execution after the event occurs
Exclude the impossible and you will be left with the solution!