Visual Studio 2013触发断点

时间:2016-02-04 12:41:05

标签: visual-studio-2013 breakpoints

我正在使用Visual Studio 2013在调试模式下编译代码时总是遇到一个断点。 在这篇文章之前,我经历了thisthis

我经历了[DEBUG-> Windows的>断点]没有可用于删除任何断点的断点。

下面的截图,了解我的exe在编译时如何触发断点。是的,我的项目包含大量库,此断点仅触发库文件。任何人都可以帮我修复它,我搜索了很多但不能吗?

enter image description here

这是我的调用堆栈副本:

    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有关此问题的信息。仍然需要出口帮助。

1 个答案:

答案 0 :(得分:0)

最后,我能够解决我赢得的问题。

  1. 问题是什么?
  2. 答:这是堆内存损坏,因此堆管理器通过触发自动断点来抛出异常。

    1. 你错在哪里?
    2. 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;
      }
      
      1. 您是如何解决问题的?
      2. Ans:首先,我使用WinDbg整齐地调试我的项目,发现确实发生了堆损坏异常。然后我写了一个与同一场景相关的简单单独的程序,并能够解决我的问题。

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