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

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

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

    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' будет выдана пустая строка, что затруднит процесс обнаружения проблемы.

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

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

      // do something...
    }

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

Данная диагностика классифицируется как:

CWE-778

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V1116.