你的代码中有没有错误,你无法解决?我希望我不是那里唯一一个有这种经历的人......
存在一些类别的错误,很难追查:
说实话,我不时自己修复这样的错误......经过几个小时(有时甚至是几天)的调试后,我觉得非常士气低落.
在这种情况下你做了什么(除了向别人寻求帮助之外并不总是可行的)?
你呢
请告诉我!
你有几个错误报告都显示同样的问题.他们都是神秘的,有关问题如何发生的类似故事.您按照步骤操作但不能可靠地重现问题.经过一些调查和网络搜索,你怀疑可能会发生什么,你很确定你可以解决它.
遗憾的是,如果没有可靠的方法来重现原始问题,您无法验证它是否真正解决了问题,而不是完全没有任何影响或加剧和掩盖真正的问题.您可能无法修复它,直到它每次都可重现,但这是一个很大的错误而不修复它会导致您的用户出现很多其他问题.
你如何验证你的变化?
我认为对于任何设计软件的人来说,这是一个非常熟悉的场景,所以我确信有很多方法和最佳实践来解决这样的错误.我们目前正在研究我们项目中的其中一个问题,我花了一些时间来确定问题,但无法证实我的怀疑.一位同事正在测试我的修复,希望"没有崩溃的一天运行"等同于"它是固定的".但是,我更喜欢更可靠的方法,我认为这里有丰富的经验.
我正在发送非常大(64000字节)的数据报.我意识到MTU远小于64000字节(典型值大约是1500字节,来自我的阅读),但我怀疑会发生两件事之一 - 要么没有数据报就能通过(所有大于1500字节)会被静默删除或导致抛出错误/异常)或64000字节数据报将被分成大约43个1500字节的消息并透明地传输.
从长远来看(2000 + 64000字节数据报),数据报的大约1%(即使是LAN似乎异常高)也会被丢弃.我可能期望通过网络,数据报可能无序到达,被丢弃,过滤等等.但是,在localhost上运行时我没想到这一点.
是什么导致无法在本地发送/接收数据?我意识到UDP是不可靠的,但我没想到它在localhost上如此不可靠.我想知道它是否只是一个时间问题,因为发送和接收组件都在同一台机器上.
为了完整起见,我已经包含了发送/接收数据报的代码.
发送:
DatagramSocket socket = new DatagramSocket(senderPort);
int valueToSend = 0;
while (valueToSend < valuesToSend || valuesToSend == -1) {
byte[] intBytes = intToBytes(valueToSend);
byte[] buffer = new byte[bufferSize - 4];
//this makes sure that the data is put into an array of the size we want to send
byte[] bytesToSend = concatAll(intBytes, buffer);
System.out.println("Sending " + valueToSend + " as " + bytesToSend.length + " bytes");
DatagramPacket packet = new DatagramPacket(bytesToSend,
bufferSize, …
Run Code Online (Sandbox Code Playgroud)