请问如何调试自己编写的非可视组件,我写了一个组件,其中内置了一个TClientSocket,封装了通讯协议。

atoz 2003-11-05 06:44:25
请问如何调试自己编写的非可视组件,我写了一个组件,其中内置了一个TClientSocket,封装了通讯协议。

想使用组件封装通讯协议的方法来简化后续开发。

请问:
1。这样做思路是否正确,内置TClientSocket是否合适。
2。如何调试非可视通讯组件。一般使用log文件还是其他?

有经验的朋友请简单介绍一下。
...全文
73 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
atoz 2003-11-11
  • 打赏
  • 举报
回复
yahee(老狼)
感谢,呵呵。你讲的是 Windows 的消息循环中的消息,跟我说得 TNotifyEvent 不太一样。不过谢谢你的关心,我正用你说的方法调试组件不错,呵呵……。

结贴!
xianghua_cq 2003-11-11
  • 打赏
  • 举报
回复
你自己遍一个客户端程序,调你的组件,就可以调试了撒
yahee 2003-11-11
  • 打赏
  • 举报
回复
>>我举的例子有歧义,我的意思是说,我写的通讯组件中,收到符合协议规范的数据则会发出我的TMyNotifyEvent FMyMessage通知事件。在调用此组件的应用程序中,如果组件收到一条数据消息,该 TMyNotifyEvent 事件仿佛重复被发生好多次(没有规律)。该事件的处理函数OnMyMessage会被不停调用。仿佛发生了很多这个事件。而实际组件只接受到了一个数据包。怪,可能我代码哪里写的不对。

因为事件处理程序会在有任何事件(比如鼠标键盘)都会被触发,所以建议跟踪时,在判断出你要处理的事件后的代码设置断点,否则就没法跟踪了。
atoz 2003-11-07
  • 打赏
  • 举报
回复
songhtao(三十年孤独)

晕菜,能否详解一下。
我的意思是,不知道组件编写是否正确,怎样调试方便。

我觉得 yahee(老狼) 的方法不错,目前正在使用中。
pp616 2003-11-06
  • 打赏
  • 举报
回复
呵呵。没觉得上面的方法好在哪里??
在bc ide中用扫面方式使用控件根本没影响。
在ide中就算在主件代码中下了断点也不会出发断点。
至于楼主说的内置了一个TClientSocket
不赞成。都自己写组件了。还用什么ClientSocket 为什么不用Socket api???

我不懂电脑 2003-11-06
  • 打赏
  • 举报
回复
把组件安装了,就可以调试了。
atoz 2003-11-06
  • 打赏
  • 举报
回复
yahee(老狼)
我举的例子有歧义,我的意思是说,我写的通讯组件中,收到符合协议规范的数据则会发出我的TMyNotifyEvent FMyMessage通知事件。在调用此组件的应用程序中,如果组件收到一条数据消息,该 TMyNotifyEvent 事件仿佛重复被发生好多次(没有规律)。该事件的处理函数OnMyMessage会被不停调用。仿佛发生了很多这个事件。而实际组件只接受到了一个数据包。怪,可能我代码哪里写的不对。

pp616(游戏全删了)
“在ide中就算在主件代码中下了断点也不会出发断点。”是这样么?我一定注意。
至于用 Socket API,我是想省事,用现成的组件是不是会快一点。
呵呵…… 不知道你有没有相关经验代码借来参考。

我曾想看 Indy 的源码来学习,可惜 object pascal 看的我好晕。不明白。
佣工7001 2003-11-05
  • 打赏
  • 举报
回复
同意 yahee(老狼)的方法,我就是这样做的,最方便!
pp616 2003-11-05
  • 打赏
  • 举报
回复
心情很不好。没心思考虑这些问题。
yahee 2003-11-05
  • 打赏
  • 举报
回复
调试时,可以不用拖控件方式来使用你的控件,把控件源程序包含到工程文件里,然后在代码行里用new来创建你的控件,采用Full Debug方式来编译,这样和调试普通程序没有什么分别。

OnMessage会不断被调用,是因为所有的Windows Message都会触发该事件。你可以在判断出特定消息的地方设断点,就不会反复触发Debug界面。
atoz 2003-11-05
  • 打赏
  • 举报
回复
yuanreid(闲云孤鹤)

你有没有合适的演示代码可以给我看看,因为初次编写这种封装协议的通讯组件,所以很多细节想不明白。比如连接验证中请求包和请求回应包,应该怎么写最合理。TClientSocket 收到tcp数据后响应 OnRead 消息的函数怎么写,何时发送回应数据包等。

如果你有合适的例子,或者知道网上哪里有可以示范的 BCB 例子,请发送给我。谢谢!

另外,我现在有个问题就是:
TClientSocket 成员变量 FClient 的 OnRead 处理函数中,接收到符合协议中的数据后,会发出定义的通知事件,比如 OnMessage。

在调用此组件的应用程序中,该 OnMessage 消息的处理函数会被不停调用。仿佛发生了很多这个事件。而实际组件只接受到了一个数据包。

谢谢!
yuanreid 2003-11-05
  • 打赏
  • 举报
回复
1。没有问题
2。我使用log文件,自己写的,但写log时一定要注意线程安全问题,同时写日志的机制要考虑(日志的缓冲,维护,格式等)

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧