如何追踪变量腐败

时间:2009-11-20 16:58:01

标签: visual-studio-2008 winapi mfc corrupt

我有一个从CStdioFile派生的MFC类,声明如下

// Datafile.h
class CDataFile : public CStdioFile
{
 public:
 CDataFile(void);
 ~CDataFile(void);

 int OpenFile(LPCWSTR FileName);
}

调用我的OpenFile函数后,FileName变量被破坏。

int CDataFile::OpenFile(LPCWSTR FileName)
    {

m_OpenFlags = CFile::modeNoTruncate | CFile::modeReadWrite;   

// Before open. FileName = "c:\afile.txt"

     if (!Open(FileName, m_OpenFlags, NULL)) 

         {
            return GetLastError();
         }

//After open. FileName = ""ﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮވĚᗸ÷ᘸ÷㼠碞­"

// other stuff
}

}

但是如果我将FileName更改为

WCHAR FileName[] = _T("c:\\afile.txt");

在打开文件之前,变量Filename保持不变。我之前已经看过MFC / Winapi的这种行为,并且总是通过使用字符数组而不是LPCWSTR或CString来解决它。为什么会这样?什么是使用VS Debugger跟踪此类问题的最佳方法。腐败似乎发生在MFC文件Filecore.cpp

if (!CFile::Open(lpszFileName, (nOpenFlags & ~typeText), pException))
  return FALSE;

1 个答案:

答案 0 :(得分:2)

看看使用data breakpoint(也称为硬件断点)。你可以在修改内存时中断。