我的程序中有几个大表,我正在尝试编写一个类来为这些表提供通用接口。每个表都在自己的头文件中,并包含一个const double数组和几个描述表布局的变量。所有表都包含在我的预编译头中。
我的类只有一个初始化函数,它确定要使用哪个表,然后将其成员变量设置为适当的值,并将其双指针设置为数组的第一个元素。我有一些#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,它说它不匹配。但是,如果我在可执行文件和.pdb上运行ChkMatch.exe,它表示它们匹配。那是怎么回事?