【发布时间】:2016-04-20 09:35:18
【问题描述】:
我有一个 AVX 优化的应用程序,我不需要使其与非 AVX CPU 兼容。但是,我想在这些旧 CPU 上显示一个干净的错误对话框,而不是让应用程序崩溃,因为这会导致客户混淆。
在我的main() 中,我创建了QApplication 实例(我正在使用Qt 框架),然后使用gcc __builtin_cpu_supports ("avx") 测试AVX。如果失败,我会显示一个错误对话框。事实证明,这在一个简单的测试应用程序上适用于非 AVX CPU。
但是,我们的(大型)应用程序在非 AVX CPU 上显示对话框之前崩溃。
我怀疑过:
- 在某处使用 AVX 内部函数的全局变量初始化。我不是 100% 肯定会到处检查,但似乎情况并非如此。
- gcc 优化器在检查前调用的某些代码上使用 AVX 指令。
问题是,我没有用于调试的非 AVX 系统,如果可能,我宁愿避免购买。
- 是否可以在我的 CPU 上调试时禁用 AVX,以便调试器在任何 AVX 指令上停止?
- 还有其他想法吗?
【问题讨论】:
-
为什么不一直运行
simple test app,如果一切正常,那么simple test app将运行main complex app? -
已经在this forum 中讨论过。 Intel Software Development Emulator 建议。
-
你收到
SIGILL,你能安装一个处理程序吗? -
@Toby :我不知道,我该怎么做?使用 mingw gcc。
-
在 gdb 或非 avx CPU 上的任何其他调试器下运行您的应用程序,然后查看它在哪里死机。做一个回溯,看看你是如何到达现在的位置的。你的两个猜测都不错,也可能是。