【问题标题】:Visual studio 2013 triggering break pointVisual Studio 2013 触发断点
【发布时间】:2016-02-04 12:41:05
【问题描述】:

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

我通过 [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++

当我调试代码时出现错误,例如“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 关于此问题的信息。仍然需要导出的帮助。

【问题讨论】:

  • 编译时?你的意思是你的exe在执行时会触发断点,确定吗?抛出异常时中断并获取堆栈跟踪以查看发生了什么。
  • 是的,@Steve 我只需单击本地 Windows 调试器并在编译期间遇到此断点。
  • 可能存在硬编码断点,或者应用程序可能正在调用 DebugBreak 函数。您无需在调试器中设置断点即可获得断点。
  • @Kulamani:locals 窗口与编译无关。我认为您可能会混淆您的术语。
  • @Kulamani:好的,越来越近了。设置符号服务器。请按照此处的说明进行操作:msdn.microsoft.com/library/b8ttk8zy(v=vs.100).aspx 完成后更新堆栈并发表评论,以便我收到通知。

标签: visual-studio-2013 breakpoints


【解决方案1】:

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

  1. 出了什么问题?

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

  1. 你在哪里做错了?

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. 您是如何解决问题的?

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2015-02-26
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多