class Blah{public: Blah(){} virtual ~Blah(){} voID WriteMessage( bool MessageReceived ) { if(MessageReceived) { cout << "Message RecIEved\n"; } }};
我试图弄清楚为什么我的代码不工作,所以我在WriteMessage()函数的条件内设置一个断点,但是一旦我在调试模式下开始运行项目,断点就会消失,并且它的工具提示说过:
Breakpoint will not currently be hit.
No executable code associated with this line.
我不知道为什么会发生这种情况,因为在.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);}解决方法 我建议您先删除输出文件:物理删除所有生成的DLL,PDB和EXE.然后再次编译(重建)生成文件.有时Visual Studio可以在构建解决方案时“丢失”和“忘记”覆盖输出文件.
这可能是由于以下几个原因:
>调试器使用的代码与应用程序正在运行的代码不同>调试器使用的pdb文件与应用程序正在运行的代码不同>应用程序正在运行的代码已被优化,调试信息已被删除.>您有断点的代码尚未加载到进程中
总结以上是内存溢出为你收集整理的c – 断点当前不会受到打击.没有与此行相关联的可执行代码全部内容,希望文章能够帮你解决c – 断点当前不会受到打击.没有与此行相关联的可执行代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)