Точка останова изменяет ход программы

Я пытаюсь проанализировать и отменить программу Objective-C, которая у меня есть.

Я внес несколько изменений в исполняемый файл, вручную изменив некоторые коды операций. Однако когда я тестирую модифицированное программное обеспечение, я получаю

Убито: 9

Это нормально, я думаю, что я коснулся чего-то, что я не должен. Я запустил тогда gdb myprogram, чтобы проанализировать ошибку. Тут что-то (странное для меня) произошло: если я не ставлю точку останова, программа получает SIGKILL, а если я пытаюсь поставить точку останова за несколько строк до той, в которой я получаю сигнал, вроде ничего не происходит и программа вроде работает отлично.

Отсюда мой вопрос: меняет ли точка останова ход программы?
Если ответ отрицательный, то я полагаю, что информации, которую я написал, недостаточно для решения, поэтому, пожалуйста, спросите, я был бы признателен, если бы у вас были какие-либо советы или предложения, чтобы указать мне правильное направление.

Я использую MacOS 10.7.4 и gdb 6.3.50 (Apple version gdb-1752). Предположим, у меня нет доступа к исходному коду.


person Manlio    schedule 23.08.2012    source источник
comment
Может быть, программа активно не разрешает точки останова и замечает, когда загружается в gdb, и выдает исключение? Возможно, мера против отладки? Интересный ОП ... +1, надеюсь услышать ответы.   -  person mr-sk    schedule 23.08.2012


Ответы (1)


Причина номер один, из-за которой точки останова изменяют работу кода, — это состояние гонки. В основном это выглядит так:

Without breakpoints:
    make some asynchronous request
    do something with response
    ERROR because request hasn't responded yet

With breakpoints:
    send some asynchronous request
    wait for user to continue
    response arrived while waiting for the continue
    do something with response
    OK!
person Niet the Dark Absol    schedule 23.08.2012