Итак, вы говорите, что перед тем, как система выдаст ошибку, она должна выдать ошибку, чтобы ... предупредить вас о надвигающейся ошибке?
Какой в этом смысл? Когда я получаю segfault, я знаю, что это означает, что я получил segfault. Мне не нужно отдельное сообщение, вначале говорящее: «Теперь вы получите ошибку».
Я полностью упускаю суть здесь? : Р
Edit:
Я понимаю, что вы имеете в виду в своем редактировании, но это нелегко реализовать. Проблема в том, что не компилятор, не язык или среда выполнения не решают, что должно произойти, если вы обращаетесь к неверному указателю. Язык официально не дает никаких обещаний или гарантий по этому поводу. Вместо этого ОС выдает ошибку, не зная, что это исполняемый файл отладки, не зная, какой номер строки вызвал проблему или что-то еще.
Единственное, что говорит эта ошибка: «Вы пытались получить доступ к адресу X, и я не могу этого допустить. Умри». Что должен с этим сделать компилятор?
Так, кто должен генерировать это полезное сообщение об ошибке? И как?
Конечно, компилятор может это сделать, но при обработке ошибок обернуть каждый доступ по одному указателю, чтобы гарантировать, что в случае нарушения segfault / access мы его перехватим и вместо этого вызовем assert. Проблема в том, что это будет смехотворно медленным . Не только «слишком медленный для выпуска», но «слишком медленный, чтобы его можно было использовать». Предполагается также, что у компилятора есть доступ к всему коду, который вы вызываете. Что если вы вызываете функцию из сторонней библиотеки? Доступ к указателю внутри, который не может быть включен в код обработки ошибок, потому что компилятор не генерирует код для этой библиотеки.
ОС может сделать это, предполагая, что она готова / может загрузить соответствующие файлы символов, каким-то образом определить, запускаете ли вы отладочный исполняемый файл и т. Д. распечатать номер строки. Поговорим о переобработке. Это вряд ли работа ОС.
И, наконец, что бы вы получили, сделав это?
Почему бы просто не запустить свой отладчик? Он автоматически прерывается, когда происходит что-то подобное, давая вам точный номер строки и все остальное.
Это можно было бы сделать, но это было бы ужасно сложно и включало бы и компилятор, и ОС, и выгода была бы чрезвычайно мала. Вы получите всплывающее окно с информацией о том, что ваш отладчик уже может сообщить вам. И с этой информацией вы затем ... запустите свой отладчик в любом случае , чтобы узнать, что пошло не так.