Visual studio 2013触发断点

Visual studio 2013 triggering break point

我正在使用 Visual studio 2013 在调试模式下编译我的代码时总是遇到断点。 在此之前 post 我经历了 this and this

我经历了 [DEBUG-> Windows-> Breakpoints] 没有可以删除的断点。

下面是我的 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'. Cannot find or open the PDB file."

'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.1.4112.4156.105\Data\Definitions\BASHDefs160125.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 关于这个问题。仍然需要出口的帮助。

终于解决了我赢的问题

  1. 问题是什么?

A: 是堆内存损坏,所以堆管理器通过触发自动断点抛出异常。

  1. 你哪里弄错了?

答:我用简单的例子来解释我的错误;

#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] = '[=10=]';

    cout << "\nplaintext: " << plaintext;

    if (plaintext != NULL);
    delete[] plaintext;     //Exception thrown here 

    system("pause");
    //cout << "\nplaintext: " << plaintext;
    return 0;
}
  1. 你是怎么解决你的问题的?

Ans:首先,我使用 WinDbg 巧妙地调试了我的项目,发现了堆损坏异常发生的确切位置。然后我写了一个与相同场景相关的简单的单独程序并能够解决我的问题。

特别感谢 Steve 帮助我解决了我的问题。