java应用程序使用的dll上的不同行为debug vs release(crash)

时间:2013-10-19 00:03:38

标签: java dll

我正在使用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行,内存搞砸了。

任何人都知道我做错了什么?我以为是因为我的编译设置,但是哪一个? 在此先感谢!!!

1 个答案:

答案 0 :(得分:0)

有关“无法找到或打开PDB文件”的错误表明它仍在调试中运行。 PDB未在已发布的版本中使用。

我会验证您的项目属性>构建>输出>输出路径将进入Debug和Release配置的正确位置。

在建造之前,您也可以尝试“清洁”。

此外,调试不会在{上中断(如果这是您的代码格式化的方式)。它只会破坏实际的代码行。如果它在不包含实际代码的行上断开,它将运行旧版本的代码 - 来自某个地方。