调试来自同一代码库的运行时差异

Debugging runtime differences from the same code base

我目前正在使用 VEINS 库和模拟包来做一些实验。因为这些有很长的 运行 时间,我正在尝试使用大学集群服务器(KITE 2.0/RHEL6.6/Lustre 2.5.29.ddnpf3)——但是,我现在遇到了几个不同的运行 时间错误,使用相同的代码 运行 在我的本地机器 (Fedora 23) 上完全没问题。我正在寻找一种轻松调试此问题的方法。我怀疑原因在于不同的 gcc 版本,或者可能是我无法远程更改的其他系统级库(但我不确定)。我确定 OMNeT++ 版本是一样的; VEINS库是我提供的,本地和远程是一样的。

我遇到的问题的一个例子是 discussed here, which I eventually fixed like this(据我所知,两个版本具有相同的语义...DimensionSet extends std::set,并且DimensionSet::timeFreqDomain 是一个 static const,在修复中用 (Dimension::time, Dimension::frequency) 初始化。

查找原因的好方法是什么?有没有一种简单的方法可以在这些机器之间 "cross-compile" ,或者有什么方法可以区分二进制文件以查找原因?我在哪里可以找到处理此类问题的常用方法?

我可能已将错误追踪到 static initialization order fiasco 的示例:MiXiM 的 Dimension::time 是静态成员,因此不应使用它来初始化其他静态成员。不幸的是,这正是 MiXiM(以及 Veins)所做的,导致了此类崩溃。

我已经推送了 commit 7807f47c(Veins 4.4 的一部分),它摆脱了几乎所有静态成员,因此整个框架应该更安全地使用。