我有一个项目,在主要'功能完成之后,连续导致两个断言失败。这是非常有问题的,因为它没有向我显示导致问题的代码段。
我能够稍微缩小问题范围。使用空主函数:
int main(int argc,char* argv[])
{
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
return main(__argc,__argv);
}
一切都运转得很好。但是,只要我使用特定dll中的任何类或函数(这是项目的一部分),问题就会开始出现:
int main(int argc,char* argv[])
{
Color col(255,0,0,255);
col.r += 1;
int r = HeapValidate(GetProcessHeap(),0,nullptr);
std::cout<<r<<std::endl;
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
return main(__argc,__argv);
}
&#39;颜色&#39; class是该dll的一部分,但它不是问题的原因。 &#39; HeapValidate&#39;返回1,表示堆根据文档有效。
有问题的dll包含数十万行代码,这使调试变得更加困难。
在类似的问题上,我发现了使用WinDBG的建议,但我不确定如何处理结果:
它确认问题是某种内存损坏,但我仍然不知道它来自何处。
有没有办法可靠地找到原点,还是我坚持使用反复试验?
我的操作系统是Windows 8.1,我使用的是Visual Studio 2013。
答案 0 :(得分:0)
在调试器下运行应用程序,然后在断言消息框中按“重试”按钮。将调用DebugBreak,调试器将进行coltrol。