我正在使用VS2012并构建我的java应用程序使用的四个dll。这4个dll的Debug版本工作正常,发布版本崩溃java应用程序。我收到了以下错误:
** dbip.exe中0x6DEC3D05(jvm.dll)的第一次机会异常:0xC0000005:访问冲突写入位置0x012C0980。 'dbip.exe'(Win32):加载'C:\ Windows \ System32 \ wintrust.dll'。无法找到或打开PDB文件。
STATUS_STACK_BUFFER_OVERRUN遇到了**
以下是我的示例代码: 在我的.h代码中,我有:
class _CABInterface : public CInterface
{
public:
virtual ~CABInterface(void);
static CABInterface* GetABInterface();
private:
CABInterface(void);
static CABInterface* m_pABInterface;
....
}
在我的.cpp代码中:
CABInterface::CABInterface()
{//line A
init(); //line B
}
CABInterface* CABInterface::GetABInterface()
{//line C
if (m_pABInterface == NULL)
{
m_pABInterface = new CABInterface();
}
return m_pABInterface;
}
在我的另一个.cpp文件中,我调用GetABInterface(),如:
CInterface* pJtagInterface = CABInterface::GetABInterface(); //line D
我在D行设置了断点; 如果我使用调试版本,从D行开始,转到第C行,然后转到第A行,第B行。一切都按预期工作;
然而,当我使用发布版本时,从D行直接跳转到A行。行c永远不会有机会执行;
奇怪的是在执行B行之后,它返回到A行,内存搞砸了。
任何人都知道我做错了什么?我以为是因为我的编译设置,但是哪一个? 在此先感谢!!!
宋
答案 0 :(得分:0)
有关“无法找到或打开PDB文件”的错误表明它仍在调试中运行。 PDB未在已发布的版本中使用。
我会验证您的项目属性>构建>输出>输出路径将进入Debug和Release配置的正确位置。
在建造之前,您也可以尝试“清洁”。
此外,调试不会在{
上中断(如果这是您的代码格式化的方式)。它只会破坏实际的代码行。如果它在不包含实际代码的行上断开,它将运行旧版本的代码 - 来自某个地方。