break myfile:1234 if $_streq(managedStr->value(), "testString")
То, что должно работать, и тот факт, что он не работает, означает ошибку в GDB.
То Сказал, что этот метод отладки чрезвычайно медленный, потому что GDB должен остановить каждый поток в строке 1234 и затем проверить значения памяти (то есть оценить условие).
Обычно это намного быстрее, чтобы вставить немного вспомогательный код в программе:
if (strcmp(namagedStr->value(), "testString") == 0) {
printf("DEBUG: match\n"); // set breakpoint here!
}
и перестройте его.
Теперь вместо того, чтобы постоянно останавливать каждый поток и оценивать условие, GDB установит точку останова для кода, равную только достигается, когда условие истинно. Это будет в 100-1000 раз быстрее (в зависимости от количества потоков).
Эта техника может быть тривиально расширена, если вам нужно варьировать фактическое значение, которое вы ищете, от запуска к запуску или даже в пределах одного запустить, добавив глобальную переменную:
const char *str_to_match = "testString"; // variable can be overwritten in GDB
if (strcmp(managedStr->value(), str_to_match) == 0) {
...
}