这让我完全迷失了。
几乎看起来像是VS中的错误,但我敢肯定这只是我做错了。

在调试代码时,我特别注意到一个函数触发了一个断点-从未被调用过。我从层次结构中进行了验证,并通过搜索所有引用来进行验证。

然后我注释掉了代码;并且它仍然达到了断点(是的,在注释行上)。

然后,我移动了注释的代码,发现不再调用该函数,而是在同一行周围的另一个注释字符串。

事实证明,此.cpp上第31和43行之间的任何行-即使在函数之间或已注释掉的行-都将触发断点,即使那里什么也没有。

例如:

void Namespace::Foo()
{
    ... code ...
}

<<<<< THIS TRIGGERS A BREAKPOINT!>>>>>

void Namespace::Bar()
{
    ... code ...
}


我在其他地方注意到,如果尝试在函数外部设置断点,则断点将自动移至下面的下一个函数。但是这些点实际上将保留在我放置它们的位置。

这是一个已知的错误?
我做错了吗?
它可能涉及在标头上声明的内联函数或宏吗?
是否有解决方法或解决方案?

编辑:调用堆栈:

>   DirectX.dll!ErrHandling::ErrHandling() Line 31  C++
    DirectX.dll!Write(wchar_t * level, const char * func, long nLine, wchar_t * line) Line 140  C++
    DirectX.dll!cDirectX::Init(int parms, int screenWidth, int screenHeight, HWND__ * hwnd) Line 32 C++
    ProjectDawn.exe!System::Initialize() Line 100   C++
    ProjectDawn.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, char * lpCmdLine, int nShowCmd) Line 51   C++
    [External Code]
    [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]


这是最上面一行(31)。这是两个不同的功能之间:

void ErrHandling::vDX_WRITE(const TCHAR* text)
{
    _TCHAR str[MAX_PATH] = _T("");

    // Start with date/time
    LPTSTR string = mFormatTimeNow();
    _tcscat_s(str, 100, string);

    _tcscat_s(str, _MAX_PATH, text); // Write the specific string

    mWriteToFile(str); // Dispatch to file
}
<<<<<<<<<<<<<<<<<<<LINE 31>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
const TCHAR* ErrHandling::stringFromError(TCHAR* szErr, long nSize, long nErr)
{
    _ASSERTE(szErr);
    *szErr = 0;
    DWORD cb = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, nErr, 0, szErr, nSize, 0);
    TCHAR szUnk[] = _T("<unknown>");
    if (!cb && nSize >= lengthof(szUnk)) lstrcpy(szErr, szUnk);
    return szErr;
}

最佳答案

我见过类似的问题,结果是由单个源文件中使用的不同行尾引起的-有些行尾是unix样式(LF),有些是窗口(CRLF)。我不确定是否可以在Visual Studio编辑器中看到行尾,但是有File-> Advanced Save选项可以在保存时强制转换它们。

关于c++ - 断点在注释行上调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26578129/

10-11 22:54
查看更多