Снижение недетерминизма с обходом? - PullRequest
0 голосов
/ 10 ноября 2011

Мне было интересно, возможно ли использовать перехват (например, Detours) для удаления недетерминизма в произвольном приложении.

Мы можем предположить однопоточные приложения (чтобы игнорировать недетерминизм, вызванный расами ипланирование).

Моим первым предположением было переопределение rand() для получения предсказуемого и повторяемого вывода для любой функции, запрашивающей псевдослучайные числа, независимо от начального числа.

Есть ли какие-либодругие часто используемые функции, которые я должен рассмотреть переопределением?

Я знаю, что здесь нет безупречного решения, но оно подойдет для большинства приложений.Также, если есть другой способ решить эту проблему, мне будет интересно почитать об этом.

1 Ответ

1 голос
/ 10 ноября 2011

На самом деле вам не нужно удалять rand() и друзей, потому что они являются генераторами псевдослучайных чисел.Для того же начального числа rand () даст те же результаты, так что вам нужно поймать вызов time(), который используется для инициализации RNG.

Ключевое понимание заключается в том, что недетерминированныйэффекты происходят главным образом из-за планирования (которое не оказывает влияния на большую часть однопоточных приложений), в результате системных вызовов и неинициализированной памяти в программе.Вам необходимо контролировать результаты системных вызовов, чтобы контролировать ввод вашей программы.strace - очень хороший инструмент для определения того, какие вызовы функций необходимо переопределить.Чтобы проверить, не используется ли какая-либо память неинициализированным, используйте valgrind.

...