我正在使用Visual Studio 2013在调试模式下编译代码时总是遇到一个断点。 在这篇文章之前,我经历了this和this。
我经历了[DEBUG-> Windows的>断点]没有可用于删除任何断点的断点。
下面的截图,了解我的exe在编译时如何触发断点。是的,我的项目包含大量库,此断点仅触发库文件。任何人都可以帮我修复它,我搜索了很多但不能吗?
这是我的调用堆栈副本:
ntdll.dll!770cfe2c() Unknown
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
[External Code]
DemoProj.exe!CryptoPP::MessageQueue::TransferTo2(CryptoPP::BufferedTransformation & target, unsigned __int64 & transferBytes, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & channel, bool blocking) Line 27 C++
DemoProj.exe!CryptoPP::BufferedTransformation::Get(unsigned char * outString, unsigned int getMax) Line 420 C++
当我调试我的代码时出现错误i.g“UMEngx86.dll”。无法找到或打开PDB文件。“
'DemoProj.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Symbols loaded.
'DemoProj.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sysfer.dll'. Cannot find or open the PDB file.
'DemoProj.exe' (Win32): Loaded 'C:\ProgramData\Symantec\Symantec Endpoint Protection\12.1.4112.4156.105\Data\Definitions\BASHDefs\20160125.011\UMEngx86.dll'. Cannot find or open the PDB file.
'DemoProj.exe' (Win32): Loaded 'C:\~…\release\log4cplus.dll'. Module was built without symbols.
我还阅读了this document有关此问题的信息。仍然需要出口帮助。
答案 0 :(得分:0)
最后,我能够解决我赢得的问题。
答:这是堆内存损坏,因此堆管理器通过触发自动断点来抛出异常。
Ans:我用简单的例子解释了我的错误;
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char *buffer = "Simple Heap Error Demo";
int len = strlen(buffer);
char *plaintext = new char[len]; //Here i mistaken
/*It should be char *plaintext = new char[len + 1]; because i need one more memory cell for NULL character, that i forgotten and later i am trying to delete [] palintext. */
memcpy(plaintext, buffer, len);
plaintext[len] = '\0';
cout << "\nplaintext: " << plaintext;
if (plaintext != NULL);
delete[] plaintext; //Exception thrown here
system("pause");
//cout << "\nplaintext: " << plaintext;
return 0;
}
Ans:首先,我使用WinDbg整齐地调试我的项目,发现确实发生了堆损坏异常。然后我写了一个与同一场景相关的简单单独的程序,并能够解决我的问题。
特别感谢帮助我解决问题的Steve。