Вы, вероятно, захотите использовать некоторую форму представления фиксированной точки для значений валюты. Вы также захотите исследовать округление банкира (также известный как "круглая половина даже".) Это избегает предвзятости, которые существуют в обычной "круглой половине" метод.
Вы действительно хотите воссоздать поведение 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);
Вы можете настроить GDB для обработки определенных сигналов по-другому . Например, следующее приведет к тому, что SIGSTOP не будет рассматриваться как событие, которое можно остановить.
handle SIGSTOP nostop noprint pass
справочный дескриптор
в gdb предоставит вам дополнительную информацию.
Вы пробовали отправить сигнал SIGCONT процессу?
kill -s SIGCONT <pid>