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