Продолжить отлаживать после отказавшего утверждения на Linux?

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

16
задан Lightness Races with Monica 15 August 2014 в 13:27
поделиться

3 ответа

Вы действительно хотите воссоздать поведение DebugBreak . Это останавливает программу в отладчике.

Мой поиск в Google "DebugBreak linux" обнаружил несколько ссылок на эту часть встроенной сборки, которая должна делать то же самое.

#define DEBUG_BREAK asm("int $3")

Затем ваше утверждение может стать

#define ASSERT(TEST) if(!(TEST)) asm("int $3");

Согласно Andomar int 3 заставляет процессор вызывать прерывание 3. Согласно drpepper более переносимым способом сделать это будет вызов:

 raise(SIGTRAP);
18
ответ дан 30 November 2019 в 17:27
поделиться

Вы можете настроить GDB для обработки определенных сигналов по-другому . Например, следующее приведет к тому, что SIGSTOP не будет рассматриваться как событие, которое можно остановить.

handle SIGSTOP nostop noprint pass

справочный дескриптор в gdb предоставит вам дополнительную информацию.

10
ответ дан 30 November 2019 в 17:27
поделиться

Вы пробовали отправить сигнал SIGCONT процессу?

kill -s SIGCONT <pid>
1
ответ дан 30 November 2019 в 17:27
поделиться