rc debounce
Pass the button signal through a D flip-flop, and then clock the flop at a rate that is slower than the button's worst-case bounce duration. For example, a 50Hz clock would clean up a button that has up to 20ms of bounce. If you are doing this in software, simply read the button at a 50Hz rate. If you have metastability phobia, use two flip-flops in series.
I've seen many incorrectly designed RC debouncers that respond sluggishly, output double pulses, or both. If you use an RC debouncer, be sure that the time constant is slow enough so that the voltage takes longer to rise or fall between the two hysteresis thresholds than the worst-case bounce duration. Also, wider thresholds improve overall performance.