Примером этого исключаемого исключения является: Когда вы пытаетесь проверить что-то, это null.
Например:
string testString = null; //Because it doesn't have a value (i.e. it's null; "Length" cannot do what it needs to do)
if (testString.Length == 0) // Throws a nullreferenceexception
{
//Do something
}
Время выполнения .NET исключение NullReferenceException при попытке выполнить действие над чем-то, что не было инстанцировано, т.е. код выше.
По сравнению с ArgumentNullException, которое обычно выбрано как защитная мера, если метод ожидает, что то, что происходит
Дополнительная информация находится в C # NullReferenceException и Null Parameter .
См. раздел 6.2 [x0] x86_64 ABI . Это детализирует интерфейс, но не много базовых данных. Это также не зависит от C ++ и может также использоваться для других целей.
В основном есть два раздела двоичного файла ELF, испускаемые gcc, которые представляют интерес для обработки исключений. Это .eh_frame
и .gcc_except_table
.
.eh_frame
следует за форматом DWARF (формат отладки, который в первую очередь входит в игру, когда вы используете gdb). Он имеет тот же формат, что и раздел .debug_frame
, выпущенный при компиляции с -g
. По существу, он содержит информацию, необходимую для возврата в состояние машинных регистров и стека в любой точке выше стека вызовов. Дополнительную информацию об этом см. В Dwarf Standard на dwarfstd.org.
.gcc_except_table
содержит информацию об обработке «посадочных площадок» обработки исключений в местах расположения обработчиков. Это необходимо, чтобы знать, когда нужно прекратить раскручивание. К сожалению, этот раздел плохо документирован. Единственные фрагменты информации, которую я смог получить, поступают из списка рассылки gcc. См., В частности, этот пост
. Остальная часть информации - это то, что фактический код интерпретирует информацию, найденную в этих разделах данных. Соответствующий код живет в libstdc ++ и libgcc. В настоящий момент я не могу вспомнить, какие фигуры живут в этом. Интерпретатор для информации кадра вызова DWARF можно найти в исходном коде gcc в файле gcc / unwind-dw.c
Хотя это похоже на Itanium, предположительно реализация аналогична для x86: обработка исключений ABI
В настоящее время доступно мало документации, однако основная система заключается в том, что GCC переводит блоки try / catch в функции вызовов функций , а затем ссылки в библиотеке с необходимой поддержкой времени выполнения ( документация о коде построения дерева включает в себя инструкцию «бросать исключение, прямо не представленное в GIMPLE, поскольку оно реализовано вызовом функции»).
К сожалению, я 'm не знакомы с этими функциями и не могут сказать вам, что посмотреть (кроме источника для libgcc - который включает в себя обработку обработки исключений).
Существует « Обработка исключений для новичков ".