Bazı girdiler altında bazı beklenmedik sonuçlar veren çok karmaşık bir C++ işlevi hata ayıklama yapıyorum. Kod bölümlerini farklı girdiler altında karşılaştırmak istiyorum, böylece hangi parçanın hataya neden olduğunu anlarım. Kod yürütme yollarını karşılaştırabilen aracı, aradığım şey. Böyle bir araç varsa lütfen bana bildirin. Ya da aynı şeyi yapmak için kullanabileceğim bazı teknikler varsa?Farklı girdiler altında aynı kod yürütme yollarını karşılaştırın
Sorunumu somut olarak açıklamak için, burada bir örnek oluşturuyorum.
double payTax(double income)
{
if (income < 10000)
return noTax();
else if (10000 < income < 30000)
return levelOneTax();
else if (30000 < income < 48000)
return levelTwoTax();
else
return levelThreeAboveTax();
}
Verilen girdi 15000, fonksiyon vergisi doğru miktarda hesaplar, ama nedense girdi 16000 hatalı vergi miktarını verir, bu pseudocode işlevi olduğunu varsayalım. Varsayılan olarak, 15000 ve 16000 girişleri, fonksiyonun tam olarak aynı yürütme yollarından geçmesine neden olur; Öte yandan, eğer farklı yollara giderlerse, o zaman fonksiyonda bir şeyler yanlış gitmiş olmalı. Bu nedenle, yürütme yollarını karşılaştıran bir araç, hatayı hızlı bir şekilde tanımlamama yardımcı olabilecek yeterli bilgiyi açığa çıkarır. Ben böyle bir araç arıyorum. Tercihen Visual Studio 2010 ile uyumludur. Böyle bir araç da değişken değerlerini koruyorsa daha iyi olur.
P.S. Hata ayıklama yapmak istediğim en son şeydir çünkü çalıştığım kod tabanı, önemsiz maaş örneğinden çok daha büyük ve karmaşıktır.
LütfenYardım edin. Teşekkürler.
Visual Studio 2010'unuz çalışıyor mu ve çalışıyor mu? Öyleyse, 'payTax()' işlevinin başlangıcında bir kesme noktası koymayı ve ardından programı hata ayıklayıcıda çalıştırmayı denediniz mi? –
Evet. Söylediğim gibi, gerçek işlev, mahrumiyete uğramış eziyetten bin kat daha karmaşıktır. Hata ayıklayıcısını kullanabilirdim, ama böyle bir araçtan çok daha fazla zaman harcayacaktı[email protected] Nissenbaum – Shuo
Tam ayrıntılara sahip olmak iyi bir cevap vermek zor olsa da, hata ayıklayıcı yalnızca temel kesme noktalarından ve tek adımdan daha fazlasını yapar. Yürütme, belirli bir ön koşulla beklenmedik bir yerde bittiğinde izlemek için koşullu kesme noktalarını kullanabilirsiniz. Örneğiniz için, kesme noktası sadece belirli bir girdi aralığında ateşleyebilir. – JasonD