最近使用_FILE_输出debug信息,发现程序的debug版本没有任何问题,release版本问题必现。和桂杰讨论后确认是编译选项的问题,但是无法确定是哪一项出了问题。
编译带pdb的release版本后,使用windbg开始了漫漫的调试路程,最终发现是输出日志时,_FILE_没有打印完整的路径,只打印了文件名,导致 _tcsrchr(lpszSourceFile, _T('\\')) + 1;
这样代码出错,桂杰反馈出是FC没有设置,
The name of the current source file. __FILE__ expands to a string surrounded by double quotation marks. To ensure that the full path to the file is displayed, use /FC (Full Path of Source Code File in Diagnostics).
但是为什么debug木有问题呢?
原因如此,Debug模式下,visual c++的编译器cl.exe会设置一个/ZI的选项,由于/ZI选项包含了/FC选项,这个选项会让代码中的__FILE__扩展成一个绝对路径的文件名,注意不是release的/Zi,这个选项让__FILE__为相对路径。
建议还是设置这个选项,如果只要文件名如何做呢?
使用#define THIS_FILE ( _tcsrchr(_T(__FILE__), _T('\\')) ? _tcsrchr(_T(__FILE__), _T('\\')) : _T(__FILE__)) 就可以了。
阅读(4293) | 评论(0) | 转发(0) |