Доступ к значениям Global std :: map из функции Global в VS Debugger приводит к сбою программы - PullRequest
0 голосов
/ 14 июня 2019

У меня есть несколько определений, как показано ниже:

class guid_typ;

static const guid_typ one {1};
static const char* sOne = "One Item";

static const guid_typ two {2};
static const char* sTwo = "Two Item";
...

Мои требования :

  1. Во время отладки, когда я нахожусь в точке останова, я хочучтобы иметь возможность идентифицировать one по его имени, sOne , в окне просмотра по крайней мере.
  2. Для регистрации во время выполнения, когда функция получает объект один , я хочу записать, скажем, sOne получено
  3. Одно место (исходный файл), где такое сопоставление существует и является частью библиотеки DLL.

Мои ограничения :

  • Я не могу изменить тип guid_typ
  • Я не могу обернуть тип, guid_typ , чтобы создать новый тип, скажем, my_guid_typ .Это будет мой предпочтительный способ, но этот тип используется как минимум в 1000 источниках, если не больше.Поэтому я не хочу пытаться сделать это сейчас.Усилия по интеграции огромны.

Моя реализация :

Я выполнил следующее, чтобы выполнить оба требования

std::map<unsigned int, const char*>& GetRpmItemMap()
{
  static std::map<unsigned int, const char*> rimap = 
      {
        { 1, "One" },
        { 2, "Two" },
        { 3, "Three" },
        { 4, "Four" },
        { 5, "Five" },
      };

  return rimap;
}

extern "C" __declspec( dllexport ) const char* RI_NAME(unsigned int in)
{
  const char* val = [&]() {
    auto& m = GetRpmItemMap();
    auto it = m.find(in);
    if (it == m.end())
      return "Nothing found";
    else
      return it->second;
  }();
  return val;
}

Текущее состояние :

Я могу вызвать эту глобальную функцию в окне просмотра VS отладчика.Это не элегантно, но работает.

GetItemName(1)  returns "One"
definitions.dll!GetItemName(4)  returns "Four"

Но время от времени я вижу, что он падает в реализации std :: map.И это то, что меня озадачивает, так как я только читаю карту.

Вопрос :

  • Почему происходит сбой?Что мне здесь не хватает?

  • Какой ваш предпочтительный подход, учитывая мои требования и ограничения?

...