Board logo

Subject: 征集双核系统下D2007不稳定问题的反馈 [Print This Page]

Author: zjy    Time: 2009-9-17 22:34     Subject: 征集双核系统下D2007不稳定问题的反馈

在论坛上看到两个关于双核系统下IDE不稳定问题的帖子:
http://bbs.cnpack.org/viewthread.php?tid=3127

http://bbs.cnpack.org/viewthread.php?tid=3115

根据堆栈信息的线索:
[053932EB]{exceptiondiag100.bpl} ExceptionDiagForm.LoadedModules (Line 56, "ExceptionDiagForm.pas" + 18) + $6C
[20ACF536]{coreide100.bpl} StructureView.TBaseStructureViewServices.SyncStructureChanged (Line 299, "StructureView.pas" + 2) + $8
[2000A455]{rtl100.bpl  } System.@CheckAutoResult (Line 18047, "sys\system.pas" + 6) + $0
[20ACF536]{coreide100.bpl} StructureView.TBaseStructureViewServices.SyncStructureChanged (Line 299, "StructureView.pas" + 2) + $8
[2003EA79]{rtl100.bpl  } Classes.CheckSynchronize (Line 9835, "common\Classes.pas" + 22) + $8
[2016335E]{vcl100.bpl  } Forms.TApplication.Idle (Line 8548, "Forms.pas" + 22) + $11
[20162637]{vcl100.bpl  } Forms.TApplication.HandleMessage (Line 8124, "Forms.pas" + 1) + $11
[2016291F]{vcl100.bpl  } Forms.TApplication.Run (Line 8223, "Forms.pas" + 20) + $3
[0042297A]{bds.exe     } bds.bds (Line 195, "" + 7) + $7

我在D2007下跟踪了一下,结果如下:
IDE有一个单独的后台线程用于实时进行代码解析,以支持Structure窗口的结构显示。
异常时堆栈信息显示出错的函数,应该是在编辑代码时,TBaseStructureViewServices.StructureChanged 在后台线程获得变更通知后,用 TThread.Queue 切换到主线程在 Idle 时通过 SyncStructureChanged 再调用 StructureChanged 时出现的异常。怀疑是由于双核系统下在主线程中执行的 StructureChanged 函数和后台的 Parser 线程之间冲突所致。

目前 CW 的助手或结构高亮等功能也是在主线程 Idle 或定时器中来执行调用后台编译器和代码分析等操作,尚不清楚是什么地方与 IDE 原有的功能有冲突,也不排除 IDE 本身有 Bug,被 CW 放大的可能性。

能重现此问题的朋友,请帮助从以下几方面测试一下:
1、当出现异常对话框时,是否每次异常的堆栈信息都与前面的类似?
2、出现异常的时刻,是否每次都是输入字符等待输入助手弹出的瞬间?
3、当禁用输入助手后,是否还会出现故障?
4、当禁用高亮专家后,是否还会出现故障?
注:禁用专家最好是按照置顶调试帖中的方法(启动IDE时按Shift键),彻底禁止专家创建。
Author: zmfu    Time: 2009-9-18 02:22

如果打开一个大的pas,在一个类的private加个变量,或改一下变量名,这时IDE挂掉的可能性是90%

就是你说的第二点
2、出现异常的时刻,是否每次都是输入字符等待输入助手弹出的瞬间?

不过自从我用新版的CW后这几天都没遇到过了
Author: zmfu    Time: 2009-9-19 16:20

今天有遇到IDE挂了,打开助手时  每次都是输入字符等待输入助手弹出的瞬间,IDE挂了,禁用助手后,使用IDE自带的现在没有再出现,代码高亮和写线开着没事

[ 本帖最後由 zmfu 於 2009-9-19 16:21 編輯 ]
Author: zmguozi    Time: 2009-9-21 13:16

能重现此问题的朋友,请帮助从以下几方面测试一下:
1、当出现异常对话框时,是否每次异常的堆栈信息都与前面的类似?
2、出现异常的时刻,是否每次都是输入字符等待输入助手弹出的瞬间?
3、当禁用输入助手后,是否还会出现故障?
4、当禁用高亮专家后,是否还会出现故障?

1.待测试;
2.出现异常时,输入字符会出现.有时候不输入任何字符也出现,光标点击某行时出现;
3.禁用专家不出现;
4.禁用后,会出现;
补充:屏蔽双核,只用一个核心,就不会出现.

[ 本帖最後由 zmguozi 於 2009-9-21 13:22 編輯 ]
Author: fdltc    Time: 2009-9-21 23:19

其实双核问题不大,没必要花费精力,大不了启动时多一个选项:以单核运行。

我没感觉ide为什么需要双核,提高不了速度,而且一个好的IDE也不应该占用过多的cpu资源
Author: zmguozi    Time: 2009-9-22 09:33

楼上的不是一个很好的解决问题的态度.有问题肯定要修补.
并且双核已经普及,再不解决,很郁闷的.
况且解决双核问题并不是单纯的助手的问题,而是对新事物的态度.

[ 本帖最後由 zmguozi 於 2009-9-22 09:36 編輯 ]
Author: zjy    Time: 2009-9-22 11:42     Subject: 这个问题有点麻烦

在我公司的双核台式机E8400和家里的双核笔记本T6600上都不能重现。

从大家的反馈看,异常应该出现在助手调用后台编译器和IDE的代码结构窗口后台刷新时,双核下两线程同时访问冲突了。

助手在2007下是用规范的方式来调用编译接口。大家能不能再测试一下,禁用专家包后,在输入字符后快速用ctrl+空格调用IDE自己的自动完成。如果出异常,就可以确定是IDE自己的问题了。
Author: zmfu    Time: 2009-9-22 14:55

打开助手时在一个大的pas里多修改几次类里的变量名或变量的类型,IDE会出现
assertion failed:amout>=dest-start,file ek_flbuf.cpp, line 315
然后IDE挂掉,如果代码助手和IDE自带的助手同时打开,这样修改几次IDE会停止响应,如果关闭CW助手,只打开IDE的助手一切正常.
Author: rarnu    Time: 2009-9-22 18:46

D2007 Up4,公司双核,家里四核,一直好好的
Author: zjy    Time: 2009-9-27 20:09     Subject: 感谢大家的回复

549版本暂时先加了个选项将IDE运行在单核模式下,BDS下默认开启。
以后如果找到更好的解决办法,再更新。
Author: wiseinfo    Time: 2009-9-27 20:38

有了D2010,俺就不会考虑用D2009了.




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0