这是奇怪行为的一天.
我们有一个用Delphi 2007创建的Win32项目,它承载.NET运行时并调用.NET来显示新表单,作为过渡期的一部分.
最近我们开始在看似随机的位置和代码点处遇到异常:算术溢出或下溢.
其中一个的堆栈跟踪如下所示:
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.RunDialog(Form form)
at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
at System.Windows.Forms.Form.ShowDialog()
at Gatsoft.Gat.UI.Windows.Forms.Remanaging.RemanageForm.DelphiOpenInNewMode(String employeeCode, String departmentCode, DateTime date) in C:\Dev\VS.NET\Gatsoft\Gatsoft.Gat.UI.Windows\Forms\Remanaging\RemanageForm.Delphi.cs:line 67
Run Code Online (Sandbox Code Playgroud)
在Visual Studio解决方案中,最外面的类库之一(即拉入它可以引用的所有引用)已经设置了一个特定的调试程序,目标是Delphi项目输出.这允许我们从Visual Studio调试.NET代码,即使程序的主要部分是用Delphi编写的.
问题只发生在从调试器运行时,而不是直接运行exe文件(通过浏览器,快捷方式,甚至是Visual Studio内部Ctrl+ F5).
有明显的机器上没有间谍软件(以As暗示此).
我们可以查看其他任何东西吗?
编辑:看起来.NET调试器正在启用此SNaN标志,而Delphi调试器则没有.我们将不得不进一步调查,但现在我会接受@Lorenzo Boccaccia的回答.
好吧,看起来我们终于解决了这个问题.在没有连接调试器的情况下,问题就开始发生了,对于我们的测试人员来说,所以我们不得不优先考虑问题.
最后,我们发现了有问题的机器的一个常见问题,它们是带有NVIDIA Quadro NVS 110M的Dell Lattitude D620笔记本电脑,以及用于配置笔记本电脑的系统映像的旧驱动程序,从2006年开始.
我在网上发现了一个帖子,但是当我重新启动以更新显示驱动程序时,我丢失了网址,因为.NET服务崩溃,主要是当机器忙于在屏幕上做某事时.重现他的问题的一种方法是打开命令提示符C:\并执行一个DIR /S只是强制大量的屏幕更新,这将触发崩溃.
他也有一张NVIDIA显卡.
我的机器上的问题大致发生在我们程序的每2-4个初创公司,但在更新视频驱动程序后,我有123个成功的初创公司没有任何问题.(顺便说一句,我可以为这些东西推荐AutoHotKey).
所以看起来我们已经找到了罪魁祸首,一个老/错误的NVIDIA驱动程序.
更新了这个问题,以便将来有人可以节省一些时间.
现在,如果你原谅我,我会在角落里哭泣. …
我很好奇是否可以复制受版本控制的目录并开始处理这两个副本.
我知道从一个VCS到另一个VCS可能有所不同,但我故意不指定任何VCS,因为我对不同的情况感到好奇.
我最近和一位同事谈论在SVN做这件事.我认为应该没问题,但我仍然不能100%肯定,因为我不知道SVN究竟在工作副本中存储了什么.
但是,如果我们谈论DVCS世界,事情可能会更加不清楚,因为每个工作副本本身就是一个存储库.现在面对在bzr这样做,我决定问这个问题.
稍后编辑:
有些人问我为什么要那样做.以下是整个故事:
在SVN的情况下,因为不在办公室,与SVN服务器的连接非常慢,所以我和我的同事决定只查看一次来源并制作本地副本.这就是我们所做的,它运作良好,但我仍然想知道它是否有效,或者它刚刚发生.
在bzr的情况下,我打算将"主"仓库移动到另一台服务器.所以我想把它复制到那里并开始考虑主要的回购.我想最安全的是做一个克隆.
什么是确保表格单元格不能小于某个最小宽度的最佳方法.
我想确保表中容器的宽度至少为100px宽.如果有更多可用空间,则表格单元格应填充该空间.
我可能想找到一个适用的解决方案
按优先顺序排列.
我希望不是每个人都在使用Rational Purify.
那么当你想测量时你会怎么做:
目前,我们手动执行[使用带有时间戳的日志语句和另一个脚本来解析日志并输出到excel.呼...)
你会推荐什么?指向工具或任何技术将不胜感激!
编辑:对不起,我没有首先指定环境,它在专有移动平台上的普通C
我有我需要分析,以确定使用的所有列名和表名(只是实际的SQL代码,而不是数据结果)单独的文本文件150个以上的SQL查询.优选地,每列和每个表出现的次数.使用嵌套的SELECT语句等编写一个全新的SQL解析程序比看起来更棘手.
必须有一个程序,或代码那样做(或接近这个),但我还没有找到它.
我已经写了几个月的Flex应用程序了,幸运的是还没有需要一个完整的调试器,到目前为止我刚刚使用了几个Alert框...
免费的Flex SDK中是否包含可用的调试器?我没有使用FlexBuilder(我一直在使用Emacs并使用ant编译).
如果没有,如何在没有FlexBuilder的情况下调试Flex应用程序?(注意:我无意使用flexbuilder)
在Windows中,是否有一种简单的方法来判断文件夹是否有更改的子文件?
我验证了,当子文件更改时,文件夹上的最后修改日期不会更新.
我可以设置一个可以修改此行为的注册表项吗?
如果重要,我正在使用NTFS卷.
我最终希望从C++程序中获得这种能力.
递归扫描整个目录对我来说不起作用,因为文件夹太大了.
更新:我确实需要一种方法来实现这一点,而不会在更改发生时运行进程.因此,安装文件系统观察器对我来说并不是最佳选择.
Update2:存档位也不起作用,因为它与上次修改日期有同样的问题.将设置文件的存档位,但文件夹不会.
在我们的应用程序中,我们使用RMI以非常不同的方式进行客户端 - 服务器通信:
我们想要做的是确保我们所有与RMI相关的代码仅使用已知的指定端口库存.这包括注册表端口(通常预期为1099),服务器端口以及回调产生的任何端口.
这是我们已经知道的:
这些Sun论坛帖子也涵盖了这些要点.
我们不知道的是:我们如何确保回调产生的客户端连接回服务器只能连接到指定的端口,而不是默认为匿名端口?
编辑:添加了一个很长的答案,总结了我的发现以及我们如何解决问题.希望这可以帮助其他有类似问题的人.
第二次编辑:事实证明,在我的应用程序中,我在创建和修改套接字工厂时似乎存在竞争条件.我曾希望允许用户在Beanshell脚本中覆盖我的默认设置.遗憾的是,在工厂创建第一个套接字后,我的脚本似乎正在运行.因此,我从默认设置和用户设置中获得了混合端口.需要做更多的工作,这超出了这个问题的范围,但我想我会指出它是其他可能不得不在某些时候踏上这些水域的人的兴趣点....
考虑下面代表经纪人的类:
public class Broker
{
public string Name = string.Empty;
public int Weight = 0;
public Broker(string n, int w)
{
this.Name = n;
this.Weight = w;
}
}
Run Code Online (Sandbox Code Playgroud)
我想从阵列中随机选择一个Broker,同时考虑它们的权重.
您如何看待下面的代码?
class Program
{
private static Random _rnd = new Random();
public static Broker GetBroker(List<Broker> brokers, int totalWeight)
{
// totalWeight is the sum of all brokers' weight
int randomNumber = _rnd.Next(0, totalWeight);
Broker selectedBroker = null;
foreach (Broker broker in brokers)
{
if (randomNumber <= broker.Weight)
{
selectedBroker = …Run Code Online (Sandbox Code Playgroud)