主题:煮茶入门讲座如何调试你的程序
主讲:D10.天地弦
Demo Tools:DebugTest 和EurekaLog v4.57 Enterprise Delphi.BCB (入门群里有共享)
Demo下载地址:
http://www.cnblogs.com/Files/DKSoft/DebugTest.rar
http://www.delphifans.com/SoftView/SoftView_1682.html
D10.天地弦 14:48:59
我在这个社区里经常看到一些问题
adoMain.Sql.Text :=’select * from Orders’+
+’ and OrderId = ’ + edOrderId.Text
+’ and CustomerID = ’ + edCustomerId.Text
D10.天地弦 14:49:05
为什么不行啊,这样的问题
D10.天地弦 14:49:24
这种问题讲完以后如果还有人问大伙都不要理了...
D10.天地弦 14:53:02
只是一个比喻...
D10.天地弦 14:52:43
大家打开DebugTest.bpg
D10.天地弦 14:53:53
打开没有?
D10.天地弦 14:52:29
现在开始第一个段落
风魂 14:54:00
开了
赤无极 14:54:04
打开听
D10.天地弦 14:54:09
大家配置一下ADOConnection...
D10.天地弦 14:54:19
都会配置吧
D10.天地弦 14:54:32
是连到Northxxx数据库的...
D10.天地弦 14:55:17
配置好了支一声...
B13.往生无语 14:55:30
好了
B6.银狼 14:55:35
好了
D10.天地弦 14:55:47
可以运行程序了..
在CustomerId输入值 ’VINET’
D10.天地弦 14:57:43
Start Query..
D10.天地弦 14:58:55
Start Query了没有?
B6.银狼 14:58:58
输入VINET,出错
D10.天地弦 14:59:03
y
B6.银狼 14:59:06
不输入,OK
D10.天地弦 14:59:10
en
D10.天地弦 14:59:16
大家先做到这一部
D10.天地弦 15:01:09
好了,现在我们来开始调试
D10.天地弦 15:01:46
即然是StartQuery出来的错误,那我们在BtnStartQuery.Click事件中开始分析
D10.天地弦 15:02:01
回到Delphi界面
D10.天地弦 15:02:15
打开主窗体...
D10.天地弦 15:02:31
看到procedure TFMainForm.btnStartQueryClick(Sender: TObject);
const
MAINSQL = ’select * from Orders’;
var
lcondi: string;
lsql: string;
begin
lcondi := InnerGetQueryCondition;
lsql := MAINSQL;
if lcondi <> ’’ then lsql := lsql + ’ Where ’ + lcondi;
adoMain.Close;
adoMain.CommandText := lsql;
adoMain.Open;
end;
D10.天地弦 15:02:35
这个函数...
D10.天地弦 15:03:32
在函数体的第一个设置一个断点开始查找为什么会出错...
尖椒牛柳 15:03:33
看懂了
D10.天地弦 15:04:12
这堂课主要是教大家如果调试,以后可以自己搞定自己的问题...
D10.天地弦 15:04:22
D10.天地弦 15:04:36
设置断点....按F9运行程序....
D10.天地弦 15:05:55
在CustomerId输入值按StartQuery...
D10.天地弦 15:06:21
程序会返回到Delphi设置了断点的地方
{
D10.天地弦 15:06:49
这里提一下F7,F8,F9这三个功能
D10.天地弦 15:07:42
F7是进入函数体....
F8是运行这一行,不进入函数体
F9从当前行开始运行
}
D10.天地弦 15:08:00
现在按F8
D10.天地弦 15:08:06
执行当前行....
D10.天地弦 15:08:43
按F8直到弹出错误提示...
D10.天地弦 15:09:37
大伙可以找到是哪一行执行的时候出现了错误?
D10.天地弦 15:10:47
打开一个数据集的时候出错,结合弹出的提示可以看出来是CommandText设定出错了...
D10.天地弦 15:10:49
对不...
F6.Jeanvi 15:11:14
嗯.
D10.天地弦 15:11:20
这样的错误是最好找的....
D10.天地弦 15:11:31
好,我们再来一次
小小 15:11:51
好
小小 15:12:02
继续啊
D10.天地弦 15:12:10
在adoMain.Open这一行停下来....
D10.天地弦 15:14:52
我们现在在Open之前看看到底Sql语句是什么东东
B6.银狼 15:16:12
怎么出来的啊
D10.天地弦 15:16:13
可以看到这个adoMain.CommandText的值(Sql)是什么了...
D10.天地弦 15:16:31
在adoMain.Open这一行停下来
F6.Jeanvi 15:16:35
ctr+f7
D10.天地弦 15:16:45
adoMain.CommandText选定这个
D10.天地弦 15:16:51
按Ctrl + F7
D10.天地弦 15:17:16
select * from Orders Where CustomerID = VINET
看到这个值后,觉得这个值有错吗?
D10.天地弦 15:17:50
如果觉得没有错马上打开
SQL 查询分析器将刚刚看到的值Sql粘贴到查询分析器里
B6.银狼 15:18:50
收到
D10.天地弦 15:19:09
再执行...
D10.天地弦 15:19:29
在这里可以发现是不是Sql语句的问题....
D10.天地弦 15:19:46
多数是Sql语句不正确引起的...
F2.歪歪宝 15:19:49
哦
D10.天地弦 15:20:29
可以发现CustomerId是个字符字段。应该
select * from Orders Where CustomerID = ’VINET’
D10.天地弦 15:20:32
这样....
D10.天地弦 15:20:47
这样我们就可以找到错误所在
D10.天地弦 15:21:36
现在大家都知道修改程序找到这个错误....
D10.天地弦 15:21:43
可不可以....
D10.天地弦 15:22:14
可以的吱一声....
尖椒牛柳 15:22:16
可以
总结:
D10.天地弦 15:25:15
上面这一小节,要学到怎么样在程序出错的时候
1.大概找到程序出错的位置
2.根据错误提示,初步判断出错的东东
3.查看对象变量的值.
D10.天地弦 15:25:47
还有要懂得在调试程序中活用F7,F8,F9
{暂时告一段落}
B6.银狼 15:28:51
继续DLL吧
B13.往生无语 15:28:58
是的。。生成的文件有当前的cpu信息。信息。还有出错的语句
B13.往生无语 15:29:19
但是出现内存错误的时候,比如内存泄漏就不行。
D10.天地弦 15:29:33
继续运行
看第二个错误...
mmoSql里的的sql语句有错么?
D10.天地弦 15:32:31
为什么会出错...
尖椒牛柳 15:32:39
D10.天地弦 15:32:46
如果删除掉注释看看...
尖椒牛柳 15:33:13
删除注释是可以的
B6.银狼 15:33:42
是啊
D10.天地弦 15:33:46
可以确定是注释惹的祸
D10.天地弦 15:33:54
难道不用能注释?
D10.天地弦 15:34:00
想想
D10.天地弦 15:34:18
/*-------------------------------
-------------------------------*/
SELECT *
FROM Orders
ORDER BY OrderId
D10.天地弦 15:34:38
发现变成这样也不会出错
D10.天地弦 15:34:50
原来注释是可以用的...
D10.天地弦 15:36:59
有些问题要靠自己去想象,,,
D10.天地弦 15:37:10
去不断去测试