Неправильные номера строки в отслеживании стека (выпуск)

Нет никаких условий в C++ для тестирования на законность указателя как общий случай. Можно, очевидно, предположить, что ПУСТОЙ УКАЗАТЕЛЬ (0x00000000) является плохими, и различными компиляторами, и библиотекам нравится использовать "специальные значения" тут и там для создания отладки легче (Например, если я когда-нибудь вижу, что указатель обнаруживается как 0xCECECECE в Visual Studio, я знаю, что сделал что-то не так), но истина то, что, так как указатель является просто индексом в память, которую почти невозможно сказать только путем рассмотрения указателя, если это - "правильный" индекс.

существуют различные приемы, что можно сделать с dynamic_cast и RTTI такой, чтобы гарантировать, что объект указал, имеет тип, который Вы хотите, но они все требуют, чтобы Вы указали на что-то допустимое во-первых.

, Если Вы хотите удостовериться, чтобы Вы программировали, может обнаружить "недопустимые" указатели затем, мой совет - это: Установите каждый указатель, Вы объявляете или к ПУСТОМУ УКАЗАТЕЛЮ или к допустимому адресу непосредственно после создания и сразу устанавливаете его в NULL после освобождения памяти, на которую он указывает. Если Вы прилежны об этой практике, то проверка ПУСТОЙ УКАЗАТЕЛЬ - все, в чем Вы когда-либо нуждаетесь.

7
задан SamB 14 April 2010 в 00:11
поделиться

2 ответа

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

7
ответ дан 7 December 2019 в 03:18
поделиться

Если вы используете большую оптимизацию компиляции, я думаю, компилятор может переместить части вашего кода.

Лучший способ отладки - использовать Reflector в dll, которая ваш клиент действительно использует. Используя номера строк stacktrace, вы

2
ответ дан 7 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: