工作中凌杂头疼错误记录
工作中遇到的一些凌杂错误记录。
SQL Server 存储过程错误213
今天大半天浪费时间在数据库存储过程上。
假设好SQL SERVER 2000,编辑表,定义ODBC数据源之后开始写存储过程,一直报错 “Error 213: 插入错误:列名或所提供值的数目与表定义不匹配。”,开始一直以为是需要Windows NT 4.0 sp6a 补丁包的,结果屡次失败,对存储过程重写了又重写,最后居然发现时忘记设置主键……可恶的MS SQL……错误提示实在恶心。
VC2003环境下变量自变化
这个应当是VC运行时库的问题,类似的问题有多种:
例1:我们在一个函数内设置一个断点,结果函数运行到该断点时却“自动”的跳到了另外一个函数体内断掉,屡试不爽,删除.pdb文件无效,重启无效。
解决方案:将发生错误的文件进行文本替换,将”\n”替换为”\n”,怀疑是由于Asic编码和wchar之间转换导致的编译器内核问题。
例2:我们一个int类型变量a原本地址假设为 0x00001234,结果当我们写了这个一个函数后,再获取a的地址就会发生改变。 int GetA(){ return a; }
解决方案: 若a是类成员变量,则将函数体内改为 return this->a; 若该函数写在了头文件中,则将其实现写在源文件下,则可避免该问题。
这两个问题都是几乎找不到任何原因可解释的,只能说MS的IDE内核有着某种问题吧。运行时库?Maybe.
例3:DEBUG模式没问题,Release模式出现问题。
解决方案:查找是否哪儿没有初始化吧,新手常出问题,已经是个基本问题了。
MSVCRT.lib 重定义,使用库冲突
使用VisualStudio 2008应用第三方库,出现了
错误 13 error LNK2005: _fflush 已经在 LIBCMTD.lib(fflush.obj) 中定义 MSVCRT.lib(MSVCR90.dll)
警告 20 warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library LINK
忽略掉LIBCMTD.lib不行,会出现其他不能解析的函数。 Project/Setting/Link/General中的 Project Options(属性->链接器->命令行): 加入 /FORCE:MULTIPLE即可,不管重名的函数
如何在Release状态下进行调试
Project->Setting=>ProjectSetting对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选Disable(Debug),
Debut info选Program Database。在Link标签中选中Generate debug info复选框。
注:只是一个介乎Debug合Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,
但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。