The most common cause is worn teeth on the flex plate. To prove that, when it won't crank, grab the serpentine belt and turn the engine a little by hand. It's common for engines to stop in the same position repeatedly and that's where the wear will take place. If turning the engine helps, replacement of the flex plate is the likely fix. You can inspect the teeth on the ring gear after the starter is removed.
The starter drive gear could also be defective although GM doesn't really have a lot of trouble with them.
Sometimes the shaft that the drive gear rides on gets gummed up and the gear doesn't engage fully with the ring gear on the flex plate before the starter motor starts spinning. Rust can cause that too.