Как символическое выполнение определяет ошибку
Я пытаюсь понять Символическое выполнение, и некоторое время я был сбит с толку о том, как он обнаруживает ошибку. Два слайда ниже демонстрируют состояние ошибки. Я понимаю, что в потоке кода есть ошибка, но я не понимаю, как символический оценщик знает это.
Два вопроса по этому поводу:
- Если в коде должны быть какие-то утверждения-утверждения для работы символического исполнителя. Или, если он может работать без каких-либо утверждений, просто выяснить, есть ли ошибка в конкретном пути в коде.
- Как это выяснить ошибку (на высоком уровне, не обязательно точный алгоритм). Хотите знать, если это просто какое-то решение ограничений на каждом шаге или что-то еще происходит? Например, на первом изображении, как он знает, если
a = 2
а такжеb = 0
что произойдет ошибка. И как он знал, чтобы даже проверить, не возникнет ли там ошибка.
Спасибо за помощь.