在注释行上调用了断点

Breakpoint called on commented line

本文关键字:断点 调用 注释      更新时间:2023-10-16

这让我完全迷失了方向。这似乎是VS中的一个bug,但我确信这只是我做错了什么。

在调试代码时,我注意到有一个函数特别触发了一个断点——从未被调用过。我从层次结构和通过搜索所有引用来验证,没有任何东西在调用它

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

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

事实证明,这个.cpp上第31行和第43行之间的任何一行——即使是在函数之间或注释掉了——都会触发一个断点,即使什么都没有。

例如:

void Namespace::Foo()
{
    ... code ...
}
<<<<< THIS TRIGGERS A BREAKPOINT!>>>>>
void Namespace::Bar()
{
    ... code ...
}

我在其他地方注意到,如果我试图在函数之外设置断点,断点将自动移动到下面的下一个函数。但这些点实际上会停留在我放置它们的地方。

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

编辑:调用堆栈:

>   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),有些是windows(CRLF)。我不确定是否可以在visualstudio编辑器中看到行尾,但有"文件"->"高级保存"选项可以在保存时预先转换它们。