断点调用注释行

时间:2014-10-26 21:23:28

标签: c++ visual-studio visual-studio-2013

这让我彻底迷失了。 这几乎看起来像VS中的一个错误,但我确定它只是我做错了。

在调试我的代码时,我注意到一个函数特别是触发断点 - 没有被调用。我从层次结构中验证并搜索所有没有调用它的引用。

然后我评论了代码;它仍在击中断点(是的,在评论行上)。

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

事实证明,第31行和第43行之间的.cpp上的任何一行 - 即使在函数之间或注释掉 - 都会触发断点,即使没有任何内容。

例如:

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;
}

1 个答案:

答案 0 :(得分:2)

我已经看到类似的问题,原因是单个源文件中使用的不同行结尾 - 一些行结尾是unix样式(LF),一些是windows(CRLF)。我不确定是否可以在visual studio编辑器中看到行结尾但是有文件 - &gt;高级保存选项可以在保存时进行优先转换。