Это сработало для действительно странных гейзенбагов.
(Я бы также рекомендовал получить копию «Отладки» Дэйва Аргана, эти идеи частично получены из его идей!)
(0) Проверьте оперативную память системы, используя что-то вроде Memtest86!
Проблема возникает во всей системе, так что сделайте пробный джиг, который тренирует все это.
Скажем, это вещь на стороне сервера с графическим интерфейсом, вы все выполняете с помощью инфраструктуры тестирования графического интерфейса, делая необходимые входные данные, чтобы спровоцировать проблему.
Он не терпит неудачу в 100% случаев, поэтому вы должны делать это чаще.
Начните с разрезания системы пополам (бинарная отбивная)
в худшем случае вы должны удалять подсистемы по одной за раз.
заглушите их, если они не могут быть закомментированы.
Посмотрите, все ли не получится. Это терпит неудачу чаще?
Ведите надлежащие записи испытаний и меняйте только одну переменную за раз!
В худшем случае вы используете джиг и тестируете недели, чтобы получить значимую статистику. Это трудно; но помните, джиг делает работу.
У меня нет потоков и только один процесс, и я не общаюсь с оборудованием
Если в системе нет потоков, нет процессов связи и контактов, нет оборудования; это сложно; heisenbugs - это, как правило, синхронизация, но в случае отсутствия процессов нет процессов, скорее всего, это будут неинициализированные данные или данные, использованные после освобождения, либо в куче, либо в стеке. Попробуйте использовать шашки, такие как валгринд.
Для многопоточных задач:
Попробуйте запустить его на другом количестве процессоров. Если он работает на 1, попробуйте на 4! Попробуйте заставить 4-компьютерную систему на 1.
В основном это будет гарантировать, что все происходит по одному.
Если есть потоки или взаимодействующие процессы, это может вытряхнуть ошибки.
Если это не помогает, но вы подозреваете, что это синхронизация или многопоточность, попробуйте изменить размер временного интервала ОС.
Сделайте это настолько хорошо, насколько позволяет ваш поставщик ОС!
Иногда из-за этого условия гонки случаются почти каждый раз!
И наоборот, попробуйте работать медленнее на временных срезах.
Затем вы запускаете тестовый зажим с отладчиком, подключенным повсеместно, и ждете, пока тестовый зажим не остановится при сбое.
Если ничего не помогает, поместите оборудование в морозильник и запустите его там. Время все будет смещено.