Вопрос

У меня есть многопоточная программа C, которая последовательно генерирует неисправность сегментации в определенной точке в программе. Когда я бегу с GDB, не отображается ошибка. Можете ли вы подумать по какой-либо причине, по которой ошибка может происходить только в том случае, если не использовать отладчик? Это довольно раздражает, не способна использовать его, чтобы найти проблему!

Это было полезно?

Решение

Классика Гейзенбаг. Отказ Из Википедии:

Время также может быть фактором в Гейзенбах. Выполнение программы под контролем отладчика может изменить время выполнения программы по сравнению с обычным выполнением. Чувствительные к времени ошибки, такие как условия гонки, могут не воспроизводить, когда программа замедляется с помощью одноэтапных источников линий в отладчике. Это особенно верно, когда поведение включает взаимодействие с объектом не под контролем отладчика, такого как при отладке сети обработки пакетов между двумя машинами и только один находится под контролем отладчика.

Отладчик может меняться время и скрывать состояние гонки.

В Linux GDB также отключает промежуточное пространство адресов, и ваша авария может быть специфичным для адресации макета пространства. Пытаться (gdb) set disable-randomization off.

Ну наконец то, ulimit -c unlimited и послеизбачье отладку (уже предложено Robie) может работать.

Другие советы

Возможно, при использовании gdb Память отображается в расположении, которое ваш над / под потоком не топчет в памяти, которая вызывает сбой. Или это может быть состояние гонки, которое больше не хватает. Хотя это звучит неразборчивым, вы должны быть счастливый Ваша программа была достаточно хорошей, чтобы выровнять на вас.

Некоторые предложения

  1. Попробуйте анализатор статического кода, такой как свободныйCppcheck
  2. Попробуйте malloc () отладчик, каклибенмент
  3. Попробуйте пробегать через валгринда

Отладив его, вы изменяете среду, в которой она работает. Похоже, вы имеете дело с каким-то гоночным состоянием, а отладка его запланировано немного по-разному, так что вы не сталкиваетесь с проблемой. То, что или вещи хранятся немного по-другому, поэтому оно не происходит. Вы можете поместить некоторую отладочную вывод в код, чтобы помочь представить проблему? Это может иметь меньшее влияние и позволить вам найти вашу проблему.

У меня есть совершенно эта проблема раньше! Это было состояние гонки, и когда я наступал, хотя код с отладчиком нитью я был, был достаточно медленным, чтобы не вызвать состояние гонки. Довольно ужасно

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top