"Check failed: 12 == (*_" hatasının çözümü
MacOS sistemlerde Microsoft ClearScript V8 kütüphanesinde alınan "Check failed: 12 == (*_" hatası ve çözümü.
Microsoft ClearScript V8 ile javascript kodu çalıştırıyorsanız ve bunuda MacOS işletim sisteminde yapıyorsanız, Check failed: 12 == (*_ hatası ile karşılaşmanız daha olası.
Bu hata, nedenleri aynı ama iki farklı çözümle karşımıza çıktı.
Açıklamak için aşağıda c# dilinde basit bir örnek kod ekledik ama hatayı bu kodla almamız pek mümkün değil :).
V8ScriptEngine? v8=new V8ScriptEngine([flags]);
string code=
"var sayi_1 = 1, sayi_2 = 2;" +
"var sonuc = sayi_1 + sayi_2;";
v8!.Execute(code);
Bu kodu çalıştırdıktan sonra eğer v8!.Script.sonuc ile oluşan değere (daha doğrusu çalıştırılan kod içinde oluşan değişkenlere) erişmek istediğimizde işler karışıyor.
- İlk karşılaştığımız neden undefined değişken değeri; örnekte sonuc değişkeninin değerini 3 olmasını bekliyoruz ama atladığımız bir nokta olduğunu farzedelim ve değişkenimiz undefined olduğunu düşünelim. O zaman erişmek istediğimizde vakit kaybetmeden hataya düşüyor :). En basit çözümü erişmek istediğimiz değişkenin kontrolünü yaparak ilerlemek veya try catch bloğu arasında kullanmak.
if(v8!.Script.sonuc is Undefined)
{
.........
}Konumuzla alakalı değil ama bir hatırlatma notu eklemekte fayda var, try-catch bloğu ve if komutu kodlama anında en az kullanılması gerekenlerdir.
- Diğer nedeni ise MacOS: Bu hatayla 2. kez karşılaştığımızda sunucuya(windows) atalım bakalım ne oluyor dedik ve kodların problemsiz bir şekilde çalıştığını gördük.
Aradık taradık ClearScriptLib adlı kullanıcının şuradaki konuyla alakalı yorumuna çözümü geldik.
Bu problem için 2 çözümlede o karşımıza geliyor;- V8 oluşturucusundaki flag tanımlamalarını yaparken JIT derlemesini iptal edin,
- "dotnet nuget locals global-packages --list" komutuya paketlerinin yerini öğrenin ve o dizine gidin ve şunları yazın
cd microsoft.clearscript.v8.native.osx-x64
cd 7.3.7 (Buradaki versiyon numarası olduğundan değişkenlik gösterebilir)
cd runtimes
cd osx-x64
cd native
Bu işlemlerde sonra şu dosyanın orda olması gerekiyor:ClearScriptV8.osx-x64.dylib
Bu dosya için şu komutu çalıştır, projeyi temizle, build et ve çalıştır.
codesign --sign - --options linker-signed --force ClearScriptV8.osx-x64.dylib