CMakeLists.txt dosyalarında nasıl hata ayıklayabilirim?


85

Mesaj ifadesi CMakeLists.txtdışında dosyalarda hata ayıklama (en azından değişkenlerin listesi) imkanı var mı ?


Yanıtlar:


62

CMake için hiç interaktif ayıklayıcı ancak aynı zamanda bayrakları vardır, yoktur -Wdev, --debug-outputve --tracehangi kudreti yardımcı olur. Ayrıca , CMake tarafından çağrılan işlemlerin çıktılarını toplayan CMakeFiles\CMakeOutput.logve günlük dosyalarını kontrol etmeyi de unutmayın CMakeFiles\CMakeError.log(örneğin, bir tür veya başlığın varlığını kontrol ederken).

Sürüm 3.7'den bu yana CMake artık resmi olarak bir "sunucu modunu" destekliyor, bu nedenle IDE'lerdeki entegrasyonun yakın gelecekte gelişmesi muhtemel. İlk destek hem var olan Qt Creator ve Visual Studio 2017 RC


ifİfadelerin hatalarını ayıklamak için hangisini kullanıyoruz CmakeList.txt? came --debug ...ve cmake --debug-output ...bunları yazdırmıyor. Bash'de eşdeğeri bash -x <cmd>.
jww

@jww Ne hata ayıklamaya çalıştığınızdan% 100 emin değilim, ancak çıktısı --tracegenellikle oldukça kapsamlı (çıktıyı bir dosyaya yeniden yönlendirin!)
Joe

Komut dosyasında hata ayıklamaya ve neden bazı kod bloklarının girilmediğini anlamaya çalışıyordum. Ama sorunu buldum: string(STRIP ...)kırılmıştı. Ayrıca Cmake değişkeninde son satırsonu satırını nasıl çıkarırsınız? . Ne olduğunu bilmiyorsanız özür dilerim bash -x.
jww

Sadece günlükleri kontrol etmekten bahsetmemelisin. Günlükleri nasıl kontrol edeceğinizi açıklamalısınız.
Thomas Jay Rush

@ThomasJayRush Günlük dosyalarının konumu ve içeriği hakkında bilgi ekledim. Bunun ötesinde herhangi bir şey, özel soruna bağlıdır.
Joe

7

VisualGDB aracı tarafından sağlanan yeni CMake Script Debugger'ı kullanmayı deneyebilirsiniz . CMakeLists.txt dosyalarında adım atmayı, kod / veri kesme noktalarını ayarlamayı, değişkenleri değerlendirmeyi / değiştirmeyi vb. Destekleyen açık kaynaklı bir CMake çatalı kullanır .

Burada yeni hata ayıklayıcı hakkında ayrıntılı bir adım adım öğretici var



3

CMakeLists.txt dosyalarımda "hata ayıklamak" için variable_watch kullanmayı seviyorum . Senaryomun üstüne koyman yeterli:

variable_watch(SOME_MY_VAR)

2

Ayrıca env varyantını okuyun VERBOSE: https://cmake.org/cmake/help/latest/envvar/VERBOSE.html

Bunu şu şekilde kullandım:

export VERBOSE=defined
make

ve biraz daha ayrıntı var.

Diğer durumlarda, CMakeLists.txtdosyayı aşağıdaki satırı içerecek şekilde düzenleyin :

set(CMAKE_VERBOSE_MAKEFILE ON)

(Bununla ilgili bazı yazılar https://bytefreaks.net/programming-2/make-building-with-cmake-verbose ).

Ayrıca, cmakehata ayıklama çıktısını kontrol eden kullanışlı seçenekler vardır, şu kılavuza bakın: https://cmake.org/cmake/help/latest/manual/cmake.1.html

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.