C ++ Создание SIGSEGV для целей отладки - PullRequest
5 голосов
/ 27 февраля 2012

Я работаю над классом совместно используемых переменных без блокировки и хочу создать ошибку SIGSEGV, чтобы проверить, работает ли моя реализация так, как я планировал.Я попытался создать функцию, которая изменяет указатель и читает его 100 раз.Затем я вызываю эту функцию в обоих потоках, и потоки выполняются в моей программе бесконечно.Это не генерирует ошибку, которую я хочу.Как мне это сделать?

edit Я вообще не обрабатываю segfaults, но они генерируются в моей программе, если я снимаю блокировки.Я хочу использовать дизайн без блокировки, поэтому я создал класс совместно используемой переменной, который использует CAS, чтобы остаться без блокировки.Есть ли способ, которым я могу иметь кусок кода, который будет генерировать segfaults, чтобы я мог использовать свой класс, чтобы проверить, что это решает проблему?

Ответы [ 4 ]

11 голосов
/ 27 февраля 2012
#include <signal.h>

raise(SIGSEGV);

Будет вызывать соответствующий сигнал.

5 голосов
/ 27 февраля 2012

malloc + mprotect + указатель разыменования

На этой справочной странице mprotect есть пример.

2 голосов
/ 27 февраля 2012

Разыменование указателя на нераспределенную память (по крайней мере, в моей системе):

int *a;
*a = 0;
1 голос
/ 27 февраля 2012

Разыменование неверного указателя:

*((int*)0x8100000000000000) = 5;
...