关于题目的一个问题?
“如果一方的算法非正常结束(超时,超内存,异常或因非法操作而被中止),该选手该局得0分,对方的得分,为本局比赛中全部可用建筑的总面积。”------------------请问我的程序在运行 的时候,内存与时间显示均未超出题目要求,但是却总是其中一个player得到全部分数而比赛结束,但又无异常抛出,而我在调试的时候未发现任何非法操作,请问都有哪些非法操作呢?能否举例说明下,这样对我调试程序也能带来方便。。。题目所给的工具能否检测出任何超时以及内存问题呢?也就是说我一旦超时或者说内存用多了能否较为准确的鉴别出来呢?
回复 1# songzh215 的帖子
你好,songzh215:如果经常出现这种情况,可以先确定是否是算法执行过程中抛出了异常。
如果能用单步模式重现这种情况,那么找出问题的原因可能就相对简单。
或者,在调试时,打开VS的异常监视,也可以快速地定位这种错误。打开的方法是,在VS中按Ctrl+D,E,在弹出的Exceptions对话框中,将Common Language Runtime Exceptions后面的复选框勾选上。
如果确定不是由于算法抛出异常造成这种情况,那可能需要一些额外的信息,来确定到底是出了什么状况。
另:工具目前能够检测到两种超时,及方法返回后的内存使用情况。对非法操作未作判断。 有个问题我不太懂,就是单步调试的时候工具显示的时间会出现超时的情况,可是在运行的时候不会出现,那我想问下,调试步骤的时候总的 运行时间在工具上显示的与实际运行时在工具上显示的有不同,这是为什么?难道调试的时候时间的 计算与运行的时候不同吗?
还有一个问题,如果选手放置建筑物的时候进行了一个错误的操作,那么该建筑在下个选手还能使用吗?我怎么在使用工具的时候,发现如果选手放置错误一个位置之后,在last operation位置还能够显示进行的操作呢?
回复 3# songzh215 的帖子
你好,songzh215:工具在单步模式和正常模式下的计时方式是一致的。如果仅有较小的误差,应该是正常的现象。如果你在单步调试时设置了断点,或者做了其它与正常模式运行不同的操作,这些都会影响计时。
算法执行错误的操作,错误操作涉及的建筑是可以再被使用的。ExecutedOperations这个集合中保存的,是选手算法的返回值,不管是否能被执行,都会原原本本地出现在这个集合中。 我加了断点之后,工具不在调试状态下运行与在调试状态下运行显示的每步骤的时间差异很大啊(我加了很多的断点,估计每条分支循环什么的都加了断点),我用调试工具运行貌似一个次也没成功过,不过正常启动的时候倒是有几次成功呢,这会是什么问题呢?
回复 5# songzh215 的帖子
你好,songzh215:如果你加了很多的断点,在调试状态下运行,会产生额外的消耗。
特别是在断点上添加了触发条件,计数器,输出等的时候,消耗会更大。添加了断点再进行调试,运行耗时比正常运行时多出几倍甚至更多都是很正常的现象。
回复 2# Iver 的帖子
我还不懂这个程序中的异常怎么看,我前几天编程的时候出现了一个数组越界问题,然后抛出了异常,在程序调试的时候就可以看出来,可是改正之后,貌似没有出现过其他的异常抛出(我还按照你前面所说的配置了那个Exception选项),可是我的player总是会出现0分,对方得分的现象。。。文档中写的是这样的------“超时,超内存,异常或因非法操作而被中止,该选手该局得0分,对方的得分,为本局比赛中全部可用建筑的总面积。”--------------超时和超内存现象在运行的时候用工具测试应该没问题,异常我没看到(也可能是我不会看),难道是非法操作?我程序中的一旦找不出合适的操作就会返回Operation.Empty,也不会错吧。。。操作如果是错误的也只会扣三分而不会清0吧。。。忒急,这几天毫无进展。。。郁闷中。学长帮我分析分析呗~~~ 还有一个问题,请问工具上如果先手先放置之后,另外一个玩家的时间和内存为什么有消耗?按理说没有啊,因为他还没有运行啊!!!
回复 8# songzh215 的帖子
你好,songzh215:另一个选手的时间和内存消耗,是生成该算法实例时的消耗。
页:
[1]