Comment restreindre gdb débogage d'un thread à la fois

Je veux déboguer un programme multi-threadé en contrôlant les threads s'exécutent lorsqu'. Je suis à l'aide de C++ et de gdb. J'ai deux fils en plus le thread principal (pour l'exemple de programme) et je tiens à déboguer un fil tout en gardant l'autre s'est arrêté.

Voici l'exemple de programme que j'ai écrit:

#include <iostream>
#include <pthread.h>
#include <stdlib.h>

#define NUM_THREADS 2

using namespace std;

void * run (void *) {
  for (int i = 0; i < 3; ++i) {
    sleep(1);
    cout << i << " " << pthread_self() << endl;
  }
  pthread_exit(NULL);
}

int main (int argc, char** argv) {
  cout << "Start..." << endl;
  int rc;

  pthread_t threads[NUM_THREADS];
  for (int i = 0; i < NUM_THREADS; ++i) {
    rc = pthread_create(&threads[i], NULL, run, NULL);
    if (rc) {
      cout << "pthread_create returned error: " << rc << endl;
      exit(-1);
    }
  }
  pthread_exit(NULL);

}

Je lancer gdb et définir le point d'arrêt à la ligne avec sleep(1). Puis-je exécuter le programme. J'ai trois threads (thread 2 et 3 sont les pthreads) et le programme est à l'thread 2 (en attente à sleep(1)). Maintenant, je veux garder le fil 3 où il est, et de garder le défilement du fil 2 (par l'exécution de c dans gdb).

Ce que j'ai essayé est set scheduler-locking on, mais il ne semble pas fonctionner comme je m'y attendais. Je suis dans le thread 2, je set scheduler-locking on, continue une couple de fois (jusqu'ici tout va bien, je suis encore dans le thread 2), interrupteur de fil 3, set scheduler-locking on, continue, et pour certaines raisons, je suis de retour dans le thread 2... quand je devrais ne pas l'être (selon ma compréhension). Est-il quelque chose que je suis absent?

OriginalL'auteur Yogeshwer Sharma | 2011-07-17