断点目前不会受到打击。 与此相关的行没有可执行的代码(Breakpoint will not c

2019-07-20 23:06发布

我在.h文件中的类:

class Blah
{
public:
    Blah(){}
    virtual ~Blah(){}

    void WriteMessage( bool MessageReceived )
    {
        if(MessageReceived)
        {
            cout << "Message Recieved\n";
        }
    }
};

我试图找出为什么我的代码不工作,所以我设置的条件断点内WriteMessage() funcition,但只要我开始运行在调试模式下的项目断点淡出,并为它的提示说过:

断点目前不会受到打击。
与此相关的行没有可执行的代码。

我不知道为什么会这样,因为在.h文件中实现时的所有其他类我的其他成员函数工作得很好。 是什么原因造成的?

编辑:好了的要求,下面是我的工作实际代码一个精简版:

VimbaBridgeAPI.h(对于.DLL头文件)

#pragma once

#ifdef VIMBABRIDGEAPI_EXPORTS
#define VIMBABRIDGEAPI_API __declspec(dllexport)
#else
#define VIMBABRIDGEAPI_API __declspec(dllimport)
#endif

#include "AlCamIncludes.h"
#include "VimbaSystem.h"

////////////////////////////////////////////
//  Global Variables ///////////////////////
////////////////////////////////////////////
extern HBITMAP hbit;
extern CEdit* global_filenamehandle;

////////////////////////////////////////////
//  Global Flags ///////////////////////////
////////////////////////////////////////////
extern bool imageReady;
extern bool take_picture;

using namespace AVT::VmbAPI;

VIMBABRIDGEAPI_API void BridgedGetImage(FramePtr framepoint, VmbUchar_t** imgDat);

VIMBABRIDGEAPI_API HBITMAP ExternalFrameRecieved( const FramePtr pFrame );

//////////////////////////////////////////////////////////////////////////
//////////  MyObserver class   ///////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
class VIMBABRIDGEAPI_API MyObserver : public IFrameObserver
{
private:
    MyObserver( MyObserver& );

    MyObserver& operator=( const MyObserver& );

    //class member variables
    //BITMAPINFO*             pbmi;
    CEdit*                  m_filenameedit;

public:

    MyObserver(CameraPtr pCamera) : IFrameObserver(pCamera) {}
    virtual ~MyObserver() {}

    void FrameReceived ( const FramePtr pFrame );
};

注:IFrameObserver是不是我写的,但FrameReceived函数是纯虚的IFrameObserver类中声明。 他们的文件说,FrameRecieved得到由他们的API称为每当一帧进来,我不得不执行的功能。 我测试了这个功能,它的工作原理,但只有当定义在类外(内我得到现在我得到的错误)

VimbaBridgeAPI.cpp(代码从用户隐藏)

void FrameRecieved( const FramePtr pFrame )
{
    DbgMsg(L"Frame Received\n");

    ////////////////////////////////////////////////////////////////////////
    //////////  Setup Bitmap  ////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////

    //// FILEHEADER ////
    BITMAPFILEHEADER* bf = new BITMAPFILEHEADER;
    bf->bfType = 0x4d42;
    bf->bfSize = 6054400 + 54 + sizeof(BITMAPINFO);
    bf->bfOffBits = 54;

    //// INFOHEADER ////
    BITMAPINFOHEADER* bih = new BITMAPINFOHEADER;
    bih->biSize = 40;
    bih->biWidth = 2752;
    bih->biHeight = -2200;
    bih->biPlanes = 1;
    bih->biBitCount = 32;
    bih->biCompression = 0;
    //bi->biSizeImage = 6054400; //not required
    bih->biXPelsPerMeter = 2835;
    bih->biYPelsPerMeter = 2835;
    bih->biClrUsed = 0;
    bih->biClrImportant = 0;

    //// INFO ////
    BITMAPINFO* pbmi = (BITMAPINFO*)alloca( sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256);
    pbmi->bmiHeader.biSize = sizeof (pbmi->bmiHeader);
    pbmi->bmiHeader.biWidth = 2752;
    pbmi->bmiHeader.biHeight = -2200;
    pbmi->bmiHeader.biPlanes = 1;
    pbmi->bmiHeader.biBitCount = 8;
    pbmi->bmiHeader.biCompression = BI_RGB;
    pbmi->bmiHeader.biSizeImage = 0;
    pbmi->bmiHeader.biXPelsPerMeter = 14173;
    pbmi->bmiHeader.biYPelsPerMeter = 14173;
    pbmi->bmiHeader.biClrUsed = 0;
    pbmi->bmiHeader.biClrImportant = 0;

    //create grayscale color palette
    for(int i=0; i<256; i++)
    {
        pbmi->bmiColors[i].rgbRed = BYTE(i);
        pbmi->bmiColors[i].rgbGreen = BYTE(i);
        pbmi->bmiColors[i].rgbBlue = BYTE(i);
        pbmi->bmiColors[i].rgbReserved = BYTE(0);
    }

    //// IMAGE DATA ////
    VmbUchar_t* imageData = NULL;
    BridgedGetImage(pFrame, &imageData);

    //////////////////////////////////////////////////////////////////////////
    ////// Create image that's printed to dialog box /////////////////////////
    //////////////////////////////////////////////////////////////////////////
    HDC hdc = ::GetDC(NULL);  
    hbit = CreateDIBitmap(hdc, bih, CBM_INIT, imageData, pbmi, DIB_RGB_COLORS);

    //clean up
    DeleteObject(bf);
    DeleteObject(bih);
    DeleteObject(hdc);
}

Answer 1:

我建议你先删除输出文件 :物理删除所有生成的DLL,PDBS和EXE文件。 然后编译(重建)再次生成的文件。 有时,Visual Studio可以“迷失”和“忘记”当你建立你的解决方案,覆盖输出文件。

造成这种情况的其他一些原因:

  • 调试器使用的代码是从应用程序正在运行的代码不同
  • 调试器使用PDB文件是从该应用程序正在运行的代码不同
  • 在应用程序运行的代码进行了优化和调试信息已经被剥离出来。
  • 在对尚未加载到进程尚未你有断点的代码


Answer 2:

我卷绕有这个问题太,我的应用程序的上下文中是C#中的主应用程序,其使用非托管C ++代码中,我想从调试器踏入的下层。 从C#项目属性我进入调试标签,并在启用调试器部分中选中了“启用非托管代码调试”。



Answer 3:

想提一提,我所经历的"Breakpoint will not be hit..."移植一些我大的错误时, MFC (managed--using clr support)项目到VS2015

什么固定的问题,对我来说是这样设置:

Configuration Properties\Linker\Debugging\Debuggable Assembly

......这样的:

Yes (/ASSEMBLYDEBUG)



Answer 4:

我也想用我自己的解决方案,以插入内容。 我有一个C ++项目加载一个包括了C ++ / CLR代码的DLL。 事实证明,我必须设置启动项目的调试器类型为“混合”。 “自动”并没有检测到它需要管理的支持,因为该DLL为手动加载该程序启动后。



Answer 5:

我有同样的问题,但清理的文件接受的解决方案并没有为我工作。 我有我的问题得到解决,它与我的代码做。 这里是我的固定的细节,希望它给一些线索,以你的修复。

我在做什么了超载CArchive <<运营商对我的结构,但该代码永远不会踏入它。 我将设置断点,然后拿到了坚实的红色符号。 当我开始调试器符号变得概述,并在其上的警告消息称:

断点目前不会受到打击。 没有可执行代码与此相关联的线

我的相关代码如下,其中破发点不破。

class Book
{
     friend CArchive& operator << (CArchive& ar, const Book & book )
     {

         ar << book.title;
         ar << "\r\n";
         ar << book.price;
         ar << "\r\n";
     }
}

现在有与此代码一个明显的问题是,它没有一个return语句return ar但是编译器从来没有抱怨。 编译器并没有抱怨的原因是我用的是操作者错误(和而从不使用它)

book *mybook = new Book(...);
ar << mybook;

因为误我通过指针访问操作,我对象的<<运营商从来没有真正被调用,这就是为什么编译器,因为从来没有使用它没有任何抱怨。

首先,我固定的调用代码

book *mybook = new Book(...);
ar << *mybook;

现在,运算符重载方法抱怨的return声明,我固定的太大。

现在我可以进入该功能。 因此,底线是,破发点没有被设置,因为这些代码基本上是由编译器(正确),因为它是从来没有在代码中使用缺阵。



文章来源: Breakpoint will not currently be hit. No executable code associated with this line