CMake hata ayıklama oturumlarını yapılandırma

Yerel CMake desteği Visual Studio 2017 ve sonraki sürümlerde kullanılabilir. Bu sürümlerin belgelerini görmek için bu makalenin Visual Studio Sürüm seçici denetimini Visual Studio 2017 veya üzeri olarak ayarlayın. Bu sayfadaki içindekiler tablosunun en üstünde bulunur.

Tüm yürütülebilir CMake hedefleri, araç çubuğundaki Başlangıç Öğesi açılan listesinde gösterilir. Hata ayıklama oturumu başlatmak ve hata ayıklayıcısını başlatmak için birini seçin.

CMake başlangıç öğeleri açılan listesinin ekran görüntüsü.

Açılan liste, aralarından seçim yapabileceğiniz hata ayıklama hedeflerinin listesini sağlar. Seçili öğe oynat düğmesi olarak görünür ve ardından çalıştırılacak seçili hata ayıklama hedefinin adı görüntülenir. Bu örnekte, seçilen hata ayıklama hedefi Merhaba Dünya .exe.

Hata ayıklama oturumunu Çözüm Gezgini da başlatabilirsiniz. İlk olarak, Çözüm Gezgini penceresinde CMake Hedefleri Görünümü'ne geçin.

CMake Hedefleri Görünümü menüsünün ekran görüntüsü.

Çözüm gezgini gösterilir. Klasör Görünümü'nde bir öğeye sağ tıklamak, Aç, Şununla aç, Şununla karşılaştır vb. seçenekleri gösteren bir menü açtı. Hedefler Görünümüne Geç menü öğesi vurgulanır.

Ardından yürütülebilir dosyaya sağ tıklayın ve Hata Ayıkla'yı seçin. Bu komut, etkin yapılandırmanıza göre seçilen hedefte hata ayıklamayı otomatik olarak başlatır.

CMake Hedefleri Görünümü hata ayıklama seçeneği menüsünün ekran görüntüsü.

CMake Hedefleri görünümünde bir hedefe sağ tıklama işlemi Başlangıç öğesi olarak ayarla, Derleme, Tümünü Temizle gibi seçeneklerin yer aldığı bir menü açtı. Hata Ayıkla menü seçeneği vurgulanır.

Visual Studio 2022 Sürüm 17.6'dan başlayarak, CMakeLists.txt dosyanızda bir hata ayıklama oturumu da başlatabilirsiniz. Bunu yapmak için, CMakeLists.txt dosyanızda bir kesme noktası ayarlayın ve Proje açılan listesindeN Projeyi CMake Hata Ayıklayıcısı ile Yapılandır'ı çalıştırın.

CMake Hata Ayıklayıcısı açılan listesinin ekran görüntüsü.

Proje açılan listesi gösterilir. Projeyi CMake hata ayıklayıcısı ile yapılandırma menü seçeneği vurgulanır.

Hata ayıklayıcısı ayarlarını özelleştirme

Projenizdeki herhangi bir yürütülebilir CMake hedefi için hata ayıklayıcı ayarlarını özelleştirebilirsiniz. Bunlar, proje kökünüzdeki bir klasörde bulunan launch.vs.json adlı bir .vs yapılandırma dosyasında bulunur. Hata ayıklama kurulum ayrıntılarınızı yapılandırıp kaydedebildiğiniz için, başlatma yapılandırma dosyası çoğu hata ayıklama senaryosunda kullanışlıdır. Bu dosyanın üç giriş noktası vardır:

  • Hata Ayıklama Menüsü: Etkin hata ayıklama hedefinize özgü hata ayıklama yapılandırmasını özelleştirmek için ana menüden ${activeDebugTarget} için Hata Ayıklama ve Başlatma Ayarları'nı seçin>. Bir hata ayıklama hedefiniz seçili değilse, bu seçenek gri görünür.

Proje için hata ayıklama ve başlatma ayarları menü komutunun ekran görüntüsü.

  • Hedefler Görünümü: Çözüm Gezgini'de Hedefler Görünümü'ne gidin. Ardından, bir hata ayıklama hedefine sağ tıklayın ve seçilen hedefe özgü hata ayıklama yapılandırmasını özelleştirmek için Hata Ayıklama Yapılandırması Ekle'yi seçin.

Hedefin kısayol menüsünde hata ayıklama yapılandırması ekle komutunun ekran görüntüsü.

  • Kök CMakeLists.txt: Bir kök CMakeLists.txt sağ tıklayın ve Hata Ayıklayıcı Seç iletişim kutusunu açmak için Hata Ayıklama Yapılandırması Ekle'yi seçin. İletişim kutusu her tür hata ayıklama yapılandırması eklemenize olanak tanır, ancak özelliği aracılığıyla çağrılacak CMake hedefini projectTarget el ile belirtmeniz gerekir.

Hata ayıklayıcı seç iletişim kutusunun ekran görüntüsü.

İstediğiniz sayıda CMake hedefi için hata ayıklama yapılandırmaları oluşturmak üzere launch.vs.json dosyasını düzenleyebilirsiniz. Dosyayı kaydettiğinizde, Visual Studio Başlangıç Öğesi açılan listesinde her yeni yapılandırma için bir girdi oluşturur.

CMakeSettings.json başvuru anahtarları

CMakeSettings.json bir dosyadaki herhangi bir anahtara başvurmak için launch.vs.json cmake.dosyasına ekleyin. Aşağıdaki örnekte, seçili durumdaki yapılandırma için CMakeSettings.json dosyasındaki anahtarın remoteCopySources değerini çeken basit bir launch.vs.json dosyası gösterilmektedir:

{
  "version": "0.2.1",
  "configurations": [
    {
      "type": "default",
      "project": "CMakeLists.txt",
      "projectTarget": "CMakeHelloWorld.exe (Debug\\CMakeHelloWorld.exe)",
      "name": "CMakeHelloWorld.exe (Debug\\CMakeHelloWorld.exe)",
      "args": ["${cmake.remoteCopySources}"]
    }
  ]
}

CMakeSettings.json'de tanımlanan ortam değişkenleri, söz dizimi ${env.VARIABLE_NAME}kullanılarak launch.vs.json'de de kullanılabilir. Visual Studio 2019 sürüm 16.4 ve sonraki sürümlerinde, hata ayıklama hedefleri CMakeSettings.json belirttiğiniz ortam kullanılarak otomatik olarak başlatılır. Ortam değişkenlerini null olarak ayarlayarak kümeyi kaldırabilirsiniz.

Launch.vs.json başvurusu

Tüm hata ayıklama senaryolarınızı desteklemek için birçok launch.vs.json özelliği vardır. Aşağıdaki özellikler hem uzak hem de yerel tüm hata ayıklama yapılandırmalarında ortaktır:

  • projectTarget: Projeyi oluştururken çağrılacak CMake hedefini belirtir. Hata Ayıklama Menüsü veya Hedefler Görünümü'nden launch.vs.json girerseniz Visual Studio bu özelliği otomatik olarak doldurulur. Bu değer, Başlangıç Öğesi açılan listesinde listelenen mevcut bir hata ayıklama hedefinin adıyla eşleşmelidir.

  • env: Söz dizimi kullanılarak eklenecek ek ortam değişkenleri:

    "env": {
          "DEBUG_LOGGING_LEVEL": "trace;info",
          "ENABLE_TRACING": "true"
        }
    
  • args: Hata ayıklamak için programa geçirilen komut satırı bağımsız değişkenleri.

Uzak projeler ve WSL için Launch.vs.json başvurusu

Visual Studio 2019 sürüm 16.6'da, uzak sistemlerde ve WSL'de hata ayıklamayı basitleştirmek için yeni bir hata ayıklama yapılandırması type: cppgdb ekledik. eski hata ayıklama yapılandırmaları type: cppdbg hala desteklenmektedir.

Yapılandırma türü cppgdb

  • name: Başlangıç Öğesi açılan listesinde yapılandırmayı tanımlamak için kolay bir ad.
  • project: Proje dosyasının göreli yolunu belirtir. Normalde, bir CMake projesinde hata ayıklarken bu yolu değiştirmeniz gerekmez.
  • projectTarget: Projeyi oluştururken çağrılacak CMake hedefini belirtir. Hata Ayıklama Menüsü veya Hedefler Görünümü'nden launch.vs.json girerseniz Visual Studio bu özelliği otomatik olarak doldurulur. Bu hedef değerin Başlangıç Öğesi açılan listesinde listelenen mevcut hata ayıklama hedefinin adıyla eşleşmesi gerekir.
  • debuggerConfiguration: Hangi hata ayıklama varsayılan değerlerinin kullanılacağını gösterir. Visual Studio 2019 sürüm 16.6'da tek geçerli seçenektir gdb. Visual Studio 2019 sürüm 16.7 veya üzeri de destekler gdbserver.
  • args: Başlangıçta hata ayıklanan programa geçirilen komut satırı bağımsız değişkenleri.
  • env: Hata ayıklanan programa geçirilen ek ortam değişkenleri. Örneğin, {"DISPLAY": "0.0"}.
  • processID: Eklenecek Linux işlem kimliği. Yalnızca uzak işleme iliştirirken kullanılır. Daha fazla bilgi için bkz . GDB kullanarak işlemlere ekleme sorunlarını giderme.

Yapılandırma için gdb ek seçenekler

  • program: varsayılan değeridir "${debugInfo.fullTargetPath}". Hata ayıklamak için uygulamanın Unix yolu. Yalnızca derleme veya dağıtım konumundaki hedef yürütülebilir dosyadan farklıysa gereklidir.
  • remoteMachineName: varsayılan değeridir "${debugInfo.remoteMachineName}". Hata ayıklamak için programı barındıran uzak sistemin adı. Yalnızca derleme sisteminden farklıysa gereklidir. Bağlantı Yöneticisi var olan bir girdi olmalıdır. Var olan tüm uzak bağlantıların listesini görüntülemek için Ctrl+Ara Çubuğu tuşlarına basın.
  • cwd: varsayılan değeridir "${debugInfo.defaultWorkingDirectory}". Uzak sistemde çalıştırıldığı program dizinin Unix yolu. Dizinin var olması gerekir.
  • gdbpath: varsayılan değeridir /usr/bin/gdb. Hata ayıklamak için kullanılan için gdb tam Unix yolu. Yalnızca özel sürümü gdbkullanılıyorsa gereklidir.
  • preDebugCommand: çağırmadan gdbhemen önce çalıştırılacak bir Linux komutu. gdb komutu tamamlanana kadar başlatılmaz. yürütmeden gdbönce bir betik çalıştırmak için seçeneğini kullanabilirsiniz.

Yapılandırmayla gdbserver izin verilen ek seçenekler (16.7 veya üzeri)

  • program: varsayılan değeridir "${debugInfo.fullTargetPath}". Hata ayıklamak için uygulamanın Unix yolu. Yalnızca derleme veya dağıtım konumundaki hedef yürütülebilir dosyadan farklıysa gereklidir.

    İpucu

    Yerel çapraz derleme senaryoları için dağıtım henüz desteklenmiyor. Windows üzerinde çapraz derleme (örneğin, Linux ARM yürütülebilir dosyası oluşturmak için Windows'ta bir derleyiciler arası kullanma) hata ayıklamadan önce ikili dosyayı uzak ARM makinesinde tarafından program belirtilen konuma el ile kopyalamanız gerekir.

  • remoteMachineName: varsayılan değeridir "${debugInfo.remoteMachineName}". Hata ayıklamak için programı barındıran uzak sistemin adı. Yalnızca derleme sisteminden farklıysa gereklidir. Bağlantı Yöneticisi var olan bir girdi olmalıdır. Var olan tüm uzak bağlantıların listesini görüntülemek için Ctrl+Ara Çubuğu tuşlarına basın.

  • cwd: varsayılan değeridir "${debugInfo.defaultWorkingDirectory}". Uzak sistemdeki dizinin çalıştırıldığı program tam Unix yolu. Dizinin var olması gerekir.

  • gdbPath: varsayılan değeridir ${debugInfo.vsInstalledGdb}. Hata ayıklamak için kullanılan öğesinin gdb tam Windows yolu. gdb C/C++ iş yükü ile Linux geliştirmesiyle yüklenen varsayılan değerdir.

  • gdbserverPath: varsayılan değeridir usr/bin/gdbserver. Hata ayıklamak için kullanılan için gdbserver tam Unix yolu.

  • preDebugCommand: başlatmadan gdbserverhemen önce çalıştırılacak bir Linux komutu. gdbserver komutu tamamlanana kadar başlatılmaz.

Dağıtım seçenekleri

Derleme makinenizi (CMakeSettings.json içinde tanımlanan) uzak hata ayıklama makinenizden ayırmak için aşağıdaki seçenekleri kullanın.

  • remoteMachineName: Uzaktan hata ayıklama makinesi. Yalnızca derleme makinesinden farklıysa gereklidir. Bağlantı Yöneticisi var olan bir girdi olmalıdır. Var olan tüm uzak bağlantıların listesini görüntülemek için Ctrl+Ara Çubuğu tuşlarına basın.
  • disableDeploy: varsayılan değeridir false. Derleme/hata ayıklama ayrımlarının devre dışı bırakılıp bırakılmadığını gösterir. olduğunda false, bu seçenek derleme ve hata ayıklamanın iki ayrı makinede gerçekleşmesini sağlar.
  • deployDirectory: Yürütülebilir dosyanın kopyaıldığı dizinin remoteMachineName tam Unix yolu.
  • deploy: Gelişmiş dağıtım ayarları dizisi. Bu ayarları yalnızca dağıtım işlemi üzerinde daha ayrıntılı denetim istiyorsanız yapılandırmanız gerekir. Varsayılan olarak, yalnızca işlemin hata ayıklaması için gerekli dosyalar uzak hata ayıklama makinesine dağıtılır.
    • sourceMachine: Dosya veya dizinin kopyalandığı makine. Bağlantı Yöneticisi depolanan tüm uzak bağlantıların listesini görüntülemek için Ctrl+Ara Çubuğu tuşlarına basın. WSL'de yerel olarak oluşturulurken bu seçenek yoksayılır.
    • targetMachine: Dosyanın veya dizinin kopyalandığı makine. Bağlantı Yöneticisi depolanan tüm uzak bağlantıların listesini görüntülemek için Ctrl+Ara Çubuğu tuşlarına basın.
    • sourcePath: üzerindeki dosya veya dizin konumu sourceMachine.
    • targetPath: üzerindeki dosya veya dizin konumu targetMachine.
    • deploymentType: Dağıtım türünün açıklaması. LocalRemote ve RemoteRemote desteklenir. LocalRemote, yerel dosya sisteminden launch.vs.json'de tarafından remoteMachineName belirtilen uzak sisteme kopyalama anlamına gelir. RemoteRemote, CMakeSettings.json'de belirtilen uzak derleme sisteminden launch.vs.json'de belirtilen farklı uzak sisteme kopyalama anlamına gelir.
    • executable: Dağıtılan dosyanın yürütülebilir dosya olup olmadığını gösterir.

Özel gdb komutları yürütme

Visual Studio, temel alınan hata ayıklayıcıyla doğrudan etkileşime geçmek için özel gdb komutların yürütülmesini destekler. Daha fazla bilgi için bkz . Özel gdb lldb komutlarını yürütme.

Günlü kaydını etkinleştir

hangi komutların gönderildiğini, hangi çıkışın gdb döndürdüğünü ve her komutun ne kadar sürdüğünü görmek için gdbMIEngine günlüğünü etkinleştirin. Daha fazla bilgi edinin

Yapılandırma türü cppdbg

Yapılandırma türü kullanılarak cppdbg uzak sistemde veya WSL'de hata ayıklama sırasında aşağıdaki seçenekler kullanılabilir. Visual Studio 2019 sürüm 16.6 veya sonraki sürümlerinde yapılandırma türü cppgdb önerilir.

  • name: Başlangıç Öğesi açılan listesinde yapılandırmayı tanımlamak için kolay bir ad.

  • project: Proje dosyasının göreli yolunu belirtir. Normalde, bir CMake projesinde hata ayıklarken bu değeri değiştirmeniz gerekmez.

  • projectTarget: Projeyi oluştururken çağrılacak CMake hedefini belirtir. Hata Ayıklama Menüsü veya Hedefler Görünümü'nden launch.vs.json girerseniz Visual Studio bu özelliği otomatik olarak doldurulur. Bu değer, Başlangıç Öğesi açılan listesinde listelenen mevcut bir hata ayıklama hedefinin adıyla eşleşmelidir.

  • args: Başlangıçta hata ayıklanan programa geçirilen komut satırı bağımsız değişkenleri.

  • processID: Eklenecek Linux işlem kimliği. Yalnızca uzak işleme iliştirirken kullanılır. Daha fazla bilgi için bkz . GDB kullanarak işlemlere ekleme sorunlarını giderme.

  • program: varsayılan değeridir "${debugInfo.fullTargetPath}". Hata ayıklamak için uygulamanın Unix yolu. Yalnızca derleme veya dağıtım konumundaki hedef yürütülebilir dosyadan farklıysa gereklidir.

  • remoteMachineName: varsayılan değeridir "${debugInfo.remoteMachineName}". Hata ayıklamak için programı barındıran uzak sistemin adı. Yalnızca derleme sisteminden farklıysa gereklidir. Bağlantı Yöneticisi var olan bir girdi olmalıdır. Var olan tüm uzak bağlantıların listesini görüntülemek için Ctrl+Ara Çubuğu tuşlarına basın.

  • cwd: varsayılan değeridir "${debugInfo.defaultWorkingDirectory}". Uzak sistemdeki dizinin çalıştırıldığı program tam Unix yolu. Dizinin var olması gerekir.

  • environment: Hata ayıklanan programa geçirilen ek ortam değişkenleri. Örneğin,

      "environment": [
          {
            "name": "ENV1",
            "value": "envvalue1"
          },
          {
            "name": "ENV2",
            "value": "envvalue2"
          }
        ]
    
  • pipeArgs: Bağlantıyı yapılandırmak için kanal programına geçirilen bir komut satırı bağımsız değişkenleri dizisi. Kanal programı, Visual Studio ile gdbarasında standart giriş/çıkış geçişi yapmak için kullanılır. CMake projelerinin hatalarını ayıklarken bu dizinin çoğunun özelleştirilmesi gerekmez. Özel durum, uzak sistemde başlatılan gdb 'dir${debuggerCommand}. Şu şekilde değiştirilebilir:

    • Linux sisteminizde DISPLAY ortam değişkeninin değerini dışarı aktarın. Aşağıdaki örnekte, bu değer şeklindedir :1.

      "pipeArgs": [
          "/s",
          "${debugInfo.remoteMachineId}",
          "/p",
          "${debugInfo.parentProcessId}",
          "/c",
          "export DISPLAY=:1;${debuggerCommand}",
          "--tty=${debugInfo.tty}"
        ],
      
    • yürütülmeden gdbönce bir betik çalıştırın. Betiğinizde yürütme izinlerinin ayarlandığından emin olun.

      "pipeArgs": [
          "/s",
          "${debugInfo.remoteMachineId}",
          "/p",
          "${debugInfo.parentProcessId}",
          "/c",
          "/path/to/script.sh;${debuggerCommand}",
          "--tty=${debugInfo.tty}"
        ],
      
  • stopOnEntry: İşlem başlatılır başlatılmaz kesme yapılıp yapılmayacağını belirten boole değeri. Varsayılan değer false.

  • visualizerFile: Bu işlemde hata ayıklarken kullanılacak bir .natvis dosyası. Bu seçenek, güzel yazdırma ile gdb uyumlu değildir. Bu özelliği ayarladığınızda da ayarlayın showDisplayString .

  • showDisplayString: Bir belirtildiğinde görüntü dizesini etkinleştiren boole visualizerFile değeri. Bu seçeneğin olarak true ayarlanması hata ayıklama sırasında daha yavaş performansa neden olabilir.

  • setupCommands: Temel alınan hata ayıklayıcıyı ayarlamak için yürütülecek bir veya daha fazla gdb komut.

  • miDebuggerPath: için tam yol gdb. Belirtilmediğinde, Visual Studio önce PATH'de hata ayıklayıcıyı arar.

  • Son olarak, yapılandırma türü için cppgdb tanımlanan tüm dağıtım seçenekleri de yapılandırma türü tarafından cppdbg kullanılabilir.

Kullanarak hata ayıklama gdbserver

kullanarak gdbserverhata ayıklamak için yapılandırmayı cppdbg yapılandırabilirsiniz. Ile Linux CMake Projelerinde gdbserverHata Ayıklama makalesindeki Microsoft C++ Ekip Blogu'nda daha fazla ayrıntı ve örnek başlatma yapılandırması bulabilirsiniz.