簡體   English   中英

c ++ app崩潰在非AVX CPU上

[英]c++ app crashing on non AVX CPUs

我有一個AVX優化的應用程序,我不需要與非AVX CPU兼容。 但是,我想在這些較舊的CPU上顯示一個干凈的錯誤對話框,而不是讓應用程序崩潰,因為這會導致客戶混淆。

在我的main()我創建了QApplication實例(我使用的是Qt框架),然后使用gcc __builtin_cpu_supports ("avx")測試AVX。 如果失敗,我會顯示錯誤對話框。 事實證明這適用於簡單測試應用程序上的非AVX CPU。

但是,我們的(大型)應用程序在非AVX CPU上顯示對話框之前崩潰。

我懷疑:

  • 使用AVX內在函數的某處的全局變量初始化。 我不是百分百肯定到處檢查過,但似乎情況並非如此。
  • gcc優化器在檢查前調用的某些代碼上使用AVX指令。

問題是,我沒有非AVX系統正在進行調試,如果可能,我寧願避免購買。

  1. 在我的CPU上調試時是否可以禁用AVX,以便調試器在任何AVX指令上停止?
  2. 還有其他想法嗎?

您可以創建一個(非優化的)包裝器程序來執行功能測試,然后通過友好消息退出或執行您的應用程序。

允許QApplication構造函數修改傳遞的參數,因此您需要獲取一個副本(或者不要在通過exec()的路徑中使用任何Qt)。

像(從我的頭上):

int main(int argc, char **argv)
{
    if (__builtin_cpu_supports ("avx")) {
        execv("/the/real/program", argv);
        perror("exec");
        exit 1;
    } else {
        QApplication app(argc, argv);
        QDialog d;
        d.show();
        return 1;
    }
}

VMWare可以偽造客戶操作系統的CPUID ,您可以關閉所有AVX位。

但是,這只是騙應用程序:如果仍然執行該AVX指令,它將不會導致應用程序進入調試器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM