Ich kenne keine solche Einrichtung, daher denke ich nicht, dass Sie so leicht davonkommen werden - und es wäre wahrscheinlich nicht so informativ, wie Sie denken, wenn Sie beim Debuggen Ihres Programms helfen. So Low-Tech es auch scheinen mag, die Protokollierung ist Ihr Freund beim Debuggen dieser Dinge. Sammeln Sie Ihre eigenen kleinen Protokollierungsfunktionen. Sie müssen nicht ausgefallen sein, sie müssen nur die Arbeit beim Debuggen erledigen.
Entschuldigung für das C ++, aber so etwas wie:
void logit(const bool aquired, const char* lockname, const int linenum)
{
pthread_mutex_lock(&log_mutex);
if (! aquired)
logfile << pthread_self() << " tries lock " << lockname << " at " << linenum << endl;
else
logfile << pthread_self() << " has lock " << lockname << " at " << linenum << endl;
pthread_mutex_unlock(&log_mutex);
}
void someTask()
{
logit(false, "some_mutex", __LINE__);
pthread_mutex_lock(&some_mutex);
logit(true, "some_mutex", __LINE__);
pthread_mutex_unlock(&some_mutex);
}
Die Protokollierung ist keine perfekte Lösung, aber nichts. Normalerweise erhalten Sie das, was Sie wissen müssen.