java应用程序使用的dll上调试与发布(崩溃)的不同行为

java应用程序使用的dll上调试与发布(崩溃)的不同行为,java,dll,Java,Dll,我正在使用VS2012并构建四个DLL,它们被我的java应用程序使用。这4个DLL的调试版本工作正常,发布版本会使java应用程序崩溃。我得到了以下错误: **dbip.exe中0x6DEC3D05(jvm.dll)处的首次机会异常:0xC0000005:访问冲突写入位置0x012C0980。 'dbip.exe'(Win32):加载了'C:\Windows\System32\wintrust.dll'。找不到或无法打开PDB文件 遇到状态\堆栈\缓冲区\溢出** 下面是我的示例代码: 在我的

我正在使用VS2012并构建四个DLL,它们被我的java应用程序使用。这4个DLL的调试版本工作正常,发布版本会使java应用程序崩溃。我得到了以下错误:

**dbip.exe中0x6DEC3D05(jvm.dll)处的首次机会异常:0xC0000005:访问冲突写入位置0x012C0980。 'dbip.exe'(Win32):加载了'C:\Windows\System32\wintrust.dll'。找不到或无法打开PDB文件

遇到状态\堆栈\缓冲区\溢出**

下面是我的示例代码: 在我的.h代码中,我有:

class _CABInterface : public CInterface
{
public:
    virtual ~CABInterface(void);

    static CABInterface* GetABInterface();
private:
    CABInterface(void);
    static CABInterface* m_pABInterface;
....
}
在my.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(),如下所示:

我在D行设置断点; 如果我使用调试版本,从D行转到C行,然后转到A行,B行。一切都按照我的预期工作

然而,当我使用发布版本时,从D行直接跳到A行。c行永远没有机会执行

奇怪的是在执行B行之后,它返回到A行,内存被弄乱了

有人知道我做错了什么吗?我认为这是因为我的编译设置,但哪一个? 提前感谢

Song

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

我将验证您的项目属性>生成>输出>输出路径是否指向调试和发布配置的正确位置

你也可以在建筑前尝试“清洁”

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

CInterface* pJtagInterface = CABInterface::GetABInterface();  //line D