В моей программе несколько больших таблиц, и я пытаюсь написать класс для обеспечения общего интерфейса с этими таблицами. Каждая таблица находится в своем собственном заголовочном файле и содержит двойной константный массив и несколько переменных, которые описывают структуру таблицы. Все таблицы включены в мой предварительно скомпилированный заголовок.
Мой класс имеет только функцию инициализации, в которой он определяет, какую таблицу использовать, а затем устанавливает для переменных-членов соответствующие значения и устанавливает двойной указатель на первый элемент массива. У меня есть некоторые #defines, которые определяют, какой набор таблиц использовать, а затем перечисление, которое я передаю в функцию initialize, чтобы определить, какую таблицу в данном наборе использовать. Итак, моя функция инициализации выглядит так:
void CMyClass::initialize(enum mode)
{
#ifdef VERSION1
switch (mode)
{
case mode1:
m_Data = &tableVersion1Mode1[0];
//set member variables
break;
case mode2:
m_Data = &tableVersion1Mode2[0];
//set member variables
break;
case mode3:
m_Data = &tableVersion1Mode3[0];
//set member variables
break;
}
#endif
#ifdef VERSION2
switch(mode)
{
//same thing
}
#endif
//etc etc
}
Проблема в том, что в некоторых ситуациях символы отладки для этой программы не загружаются, и ни одна из точек останова не срабатывает. Я сузил проблему до двойного указателя в этом классе, так как я могу просто закомментировать эту переменную-член, и проблема исчезнет. Но я совершенно сбит с толку его поведением.
Если я установлю указатель на другую таблицу в каждом случае, как указано выше, то символы не будут загружены.
Если я закомментирую одно из назначений указателя, независимо от того, какие символы загружены, и все работает нормально.
Если я установлю указатель на один и тот же массив для любых двух или всех трех случаев, тогда символы будут загружены, и все будет работать нормально.
Я провел небольшое исследование по этому вопросу, и я знаю, что если символы не загружаются, это, вероятно, проблема с файлами .pdb. Я попытался вручную загрузить .pdb, и он говорит, что он не совпадает. Но если я запускаю ChkMatch.exe на исполняемом файле и .pdb, он говорит, что они совпадают. Так что же происходит?