SIMCOM SIM900 module is shutting down when connecting with GPS Shield

You can only have one SoftwareSerial listening at a time. When you start the gpsrSerial, the Arduino stops listening to the gpsSerial.

Here is a similar app. It shows how to listen to the GPS until it has a good location. Then it listens to the SIM900 while it sends the location to a website. Then it goes back to listening to the GPS.

BTW, SoftwareSerial is very inefficient. It blocks interrupts for long periods of time. This can interfere with your sketch or with other libraries. It cannot transmit and receive at the same time.

AltSoftSerial is the best software serial library, but it can only be used on pints 8 & 9 (of an UNO).

If you can't use those pins, my NeoSWSerial library is almost as efficient. It can transmit and receive at the same time, and it supports baud rates 9600, 19200 and 38400.

I would also suggest my NeoGPS library. It is smaller, faster and more accurate than all other libraries. Here is a version of your sketch that uses NeoGPS and NeoSWSerial:

#include <NMEAGPS.h>
#include <NeoSWSerial.h>

NeoSWSerial gprsSerial(7, 8);
bool okToSendMessage = true;

int RXPin = 3;
int TXPin = 2;

int GPSBaud = 9600;

NMEAGPS gps;
gps_fix fix; // all the GPS information fields in one struct
bool    firstFixIgnored = false;

NeoSWSerial gpsSerial(RXPin, TXPin);

void setup()
{
  // Start the Arduino hardware serial port at 9600 baud
  Serial.begin(115200);

  gprsSerial.begin(19200);

  gpsSerial.begin(GPSBaud);
}

void loop()
{
  while (gps.available( gpsSerial )) {
    fix = gps.read();

    if (firstFixIgnored) {
      displayInfo();

      // Only send one message after reset
      if (okToSendMessage) {
        SendTextMessage();
        okToSendMessage = false;
      }
    } else {
      firstFixIgnored = true;
    }
  }

  // If 5000 milliseconds pass and there are no characters coming in
  // over the software serial port, show a "No GPS detected" error
  if ((millis() > 5000) && (gps.statistics.chars < 10))
  {
    Serial.println( F("No GPS detected") );
    while(true);
  }
}

void displayInfo()
{
  Serial.print( F("Latitude = ") );

  if (fix.valid.location)
    Serial.print( fix.latitude(), 6 );
  Serial.print( F(", Longitude = ") );
  if (fix.valid.location)
    Serial.print( fix.longitude(), 6 );

  Serial.print( F(", Date = ") );

  if (fix.valid.date)
  {
    Serial.print( fix.dateTime.month );
    Serial.print( '-' );
    Serial.print( fix.dateTime.day );
    Serial.print( '-' );
    Serial.print( fix.dateTime.year );
  }

  if (fix.valid.time)
  {
    Serial.print( ' ' );
    if (fix.dateTime.hours < 10)
      Serial.print( '0' );
    Serial.print( fix.dateTime.hours );
    
    Serial.print( ':' );
    if (fix.dateTime.minutes < 10) 
      Serial.print( '0' );
    Serial.print( fix.dateTime.minutes );
    
    Serial.print( ':' );
    if (fix.dateTime.seconds < 10) 
      Serial.print( '0' );
    Serial.print( fix.dateTime.seconds );
    
  }

  Serial.println();
}

void SendTextMessage()
{
  gprsSerial.listen();

  gprsSerial.print("AT+CMGF=1\r");   
  delay(100);
  gprsSerial.println("AT + CMGS = \"+1xxxxxxxxxxx\"");
  delay(100);
  gprsSerial.println("A test message new message 2!");
  delay(100);
  gprsSerial.println((char)26);//the ASCII code of the ctrl+z is 26
  delay(100);
  gprsSerial.println();

  gpsSerial.listen();
  firstFixIgnored = false;
}

Your original sketch used 13632 bytes of program space and 695 bytes of RAM.
The NeoGPS sketch uses 10406 bytes of program space and 529 bytes of RAM, a significant savings.

If you'd like to try it, you can get NeoGPS from the Arduino IDE Library Manager, under the menu Sketch -> Include Library -> Manage Libraries.... NeoSWSerial can be downloaded from the link above.

It you never read the responses from the GPRS device, and you could change one of their baud rates to match the other one, you would not have to call listen() to switch between them. You only have to listen to the GPS. And then you could use just one NeoSWSerial variable:

    NeoSWSerial gpsSerial( 3, 8 );
    #define gprsSerial gpsSerial // they're the same!

This one variable could be used to receive on pin 3 (from GPS) and transmit on pin 8 (to GPRS). But, like I said, the baud rates would have to be the same.

Cheers,
/dev