Подтвердить что ты не робот

Точка останова в настоящее время не будет удалена. Отсутствует исполняемый код, связанный с этой строкой

У меня есть класс в файле .h:

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

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

Я пытался выяснить, почему мой код не работает, поэтому я установил точку останова в условном выражении внутри функции WriteMessage(), но как только я начал запускать проект в режиме отладки, точка останова исчезла, и подсказка для него говорила:

В настоящий момент точка останова не будет удалена. Не существует исполняемого кода, связанного с этой строкой.

Я понятия не имею, почему это происходит, потому что все мои другие функции-члены для других классов отлично работают при реализации в файле .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 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);
}
4b9b3361

Ответ 1

Сначала я предлагаю вам Удалить выходные файлы. Физически удалить все сгенерированные DLL, PDB и EXE. Затем скомпилируйте (перестройте), чтобы сгенерировать файлы. Иногда Visual Studio может "потеряться" и "забыть" перезаписать выходные файлы при создании вашего решения.

Это может произойти по нескольким причинам:

  • Код, используемый отладчиком, отличается от кода, выполняемого приложением
  • Файл pdb, используемый отладчиком, отличается от кода, выполняемого приложением
  • Был оптимизирован код, в котором выполняется приложение, и была удалена информация об отладке.
  • Код, в котором у вас есть точки останова, еще не загружен в процесс

Ответ 2

У меня тоже была эта проблема, контекст моего приложения был основным приложением на С#, в котором использовался неуправляемый код на С++ на нижнем уровне, который я хотел бы ввести в отладчик. Из свойств проекта С# я перешел на вкладку "Отладка" и в разделе "Включить отладчики" отметьте "Включить неуправляемую отладку кода".

C# Project Properties Debug Tab

Ответ 3

Хотелось упомянуть, что я испытал ошибку "Breakpoint will not be hit..." при переносе некоторых из моих старых проектов MFC (managed--using clr support) в VS2015.

Для меня было исправлено следующее:

Configuration Properties\Linker\Debugging\Debuggable Assembly

... к этому:

Yes (/ASSEMBLYDEBUG)

Ответ 4

Я также хотел подслушивать свое решение. У меня был проект С++, загружающий dll, который состоял из кода С++/CLR. Оказывается, мне пришлось установить тип отладки проекта запуска на "Смешанный". "Авто" не обнаружил, что ему нужна управляемая поддержка, потому что dll загружалась вручную после запуска программы.

Ответ 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, и я тоже это исправил.

Теперь я могу войти в функцию. Таким образом, нижняя строка заключалась в том, что точка останова не была установлена, потому что этот код был существенно отключен компилятором (правильно), потому что он никогда не использовался в коде.

Ответ 6

Я пытался нажать Ctrl+F5, который выдает ту же ошибку, что вы получили в коде Visual Studio. Однако, как только я захожу в раздел Debug и нажимаю зеленую кнопку, которая инициализируетenter image description here Отладка помогла мне решить эту ошибку.