Возможный захватить запись для обращения (x86 - Linux)

Вам нужно поместить основной цикл в другой цикл, чтобы он снова запускался после выполнения функции game_over:

# main loop
while True:
    run = True
    while run:
        main()

    game_over()

Поскольку pygame.quit() не выходит из программы, вам потребуется вместо этого, чтобы обе петли были while run: и имели две run = True с, или использовали sys.exit(0) или raise SystemExit(0) после pygame.quit().

Вы также должны удалить return run из цикла for в функции game_over().

8
задан user48956 3 March 2009 в 22:54
поделиться

3 ответа

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

14
ответ дан 5 December 2019 в 05:46
поделиться

GDB действительно имеет ту функцию: это называют аппаратными контрольными точками, и это очень хорошо поддерживается на Linux/x86:

(gdb) watch *(int *)0x12345678

Если Ваши сбои приложения GDB, создайте текущий GDB от Главы CVS.

Если это, которое все еще приводит к сбою GDB, регистрируют ошибку GDB.

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

4
ответ дан 5 December 2019 в 05:46
поделиться

То, в чем Вы нуждаетесь, является доступом к отладочным регистрам X86: http://en.wikipedia.org/wiki/Debug_register

Необходимо будет установить адрес точки останова в одном из DR0 к DR3 и затем условие (запись данных) в DR7. Прерывание произойдет, и можно выполнить код отладки, чтобы считать DR6 и найти то, что вызвало точку останова.

Если GDB не работает, Вы могли бы попробовать более простой/меньший отладчик, такой как http://sourceforge.net/projects/minibug/ - если это не работает, можно, по крайней мере, пройти код и понять, как использовать аппаратные средства отладки на процессоре сами.

Кроме того, существует большой ресурс разработчика IBM при освоении Linux, отлаживающего методы, которые должны предоставить некоторые дополнительные возможности:

http://www.ibm.com/developerworks/linux/library/l-debug/

Довольно хорошая статья о выполнении этого является окнами, здесь (я знаю, что Вы работаете на Linux, но другие могли бы приехать к этому вопросу, желающему сделать это в окнах):

http://www.codeproject.com/KB/debug/hardwarebreakpoint.aspx

- Adam

8
ответ дан 5 December 2019 в 05:46
поделиться