﻿# V1116\. Creating an exception object without an explanatory message may result in insufficient logging\.

Анализатор обнаружил создание объекта исключения без поясняющего сообщения\. Такой подход может привести к недостаточному логированию и затруднить процесс выявления ошибок\.

Рассмотрим следующий пример:

```cpp
void DoSomething(const char *val)
{
  if (!val) throw std::runtime_error { "" };

  // do something...  
}

void foo()
{
  const char *val = ....;
  try
  {
    DoSomething(val);
  }
  catch(std::runtime_error &err)
  {
    std::cerr << err.what() << std::endl;
  }
}
```

В функции 'DoSomething' выбрасывается исключение 'std::runtime\_error', которое будет обработано в функции 'foo'\. В процессе обработки ожидается, что в 'std::cerr' попадёт информация о причине создания исключения\. Вместо этого в 'std::cerr' будет выдана пустая строка, что затруднит процесс обнаружения проблемы\.

Корректный вариант может выглядеть так:

```cpp
void DoSomething(const char *val)
{
  if (!val)
  {
    throw std::runtime_error{ "[DoSomething]: "
                              "the poiner 'val' is nullptr." };
  }

  // do something... 
}
```

Анализатор сгенерирует предупреждение V1116, если обнаружит создание [стандартного исключения](https://en.cppreference.com/w/cpp/error/exception#Standard_exceptions) без поясняющего сообщения\. Если вы хотите обнаруживать подобные ситуации для пользовательских исключений, то можете воспользоваться [механизмом пользовательских аннотаций](https://pvs-studio.ru/ru/docs/manual/6743/#exception_annotation)\.