这让我彻底迷失了。 这几乎看起来像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;
}
答案 0 :(得分:2)
我已经看到类似的问题,原因是单个源文件中使用的不同行结尾 - 一些行结尾是unix样式(LF),一些是windows(CRLF)。我不确定是否可以在visual studio编辑器中看到行结尾但是有文件 - &gt;高级保存选项可以在保存时进行优先转换。