First thing to check is for iron brake rotor filings stuck on the center magnet of the Crankshaft Position Sensor, these cannot only eventually disable the tach and/or complete ignition timing, fuel regulation and injection timebase, longer metal filings stuck there can completely screw up the virtual spark advance/retard operation. Also check that nobody has bypassed the fuel pump resistor, as chronic (rich) fuel overpressure will also give exactly these sorts of symptoms.
BTW a $2.00 12VDC 75Watt MR16 quartz halogen track lighting bulb is the best replacement for the not so cheap huge $30-40 TRW ceramic encased fuel pump resistor/fuse thingy that so often blows out leaving you stranded on the highway when the fuel pump hits a rock of crap in the gas tank pickup line at low pressure.
Seems GM neglected to use a durable DALE-type high power heat sinked power resistor with a secondary 8 amp fuse for safe low power fuel pump operation, electing to use the (now unreliable) resistor itself as the "secondary" low-voltage operation "fuse".
A sealed 12v quartz halogen bulb just goes full brightness whenever/if ever the fuel pump motor stalls at low speed, and restarting the engine will clear the blockage with full power to the pump motor. (it also doubles as a nice fairly useful engine compartment light that informs you of valid low fuel pressure pumping mode) When the quartz halogen is functioning in resistor (low fuel pump power) mode it simply, slowly, glows-up to cool soft yellow and cherry red, (10 watt brightness) rather than fully incandescing, and it also has much higher cold resistance giving a more graceful fuel pressure drop which the mechanical vacuum fuel pressure regulator handles more gracefully.
It also provides for a bit lower than stock low-fuel-pressures, meaning more accurate injection/cutoff, broader trim control range and better mileage.
Unlike the undependable original TRW potted-ceramic resistor-fuse thingy, the 75 Watt bulb will last you indefinitely (at 10 Watts), can be found in most dollar stores and only costs you $2 to replace. If it ever goes on you, you can get the engine going again with a single wire twist-tie...