Sdílet prostřednictvím


Konfigurace ladicích relací CMake

Nativní podpora CMake je dostupná v sadě Visual Studio 2017 a novějších verzích. Pokud chcete zobrazit dokumentaci k těmto verzím, nastavte ovládací prvek selektoru verzí sady Visual Studio pro tento článek na Visual Studio 2017 nebo novější. Nachází se v horní části obsahu na této stránce.

Všechny cíle spustitelného souboru CMake se zobrazují v rozevíracím seznamu Po spuštění položky na panelu nástrojů. Vyberte jednu, která spustí ladicí relaci a spustí ladicí program.

Snímek obrazovky s rozevíracím seznamem spouštěcích položek CMake

V rozevíracím seznamu najdete seznam cílů ladění, ze které si můžete vybrat. Vybraná položka se zobrazí jako tlačítko přehrávání následované názvem vybraného cíle ladění, který se má spustit. V tomto příkladu je vybraný cíl ladění Hello World .exe.

Ladicí relaci můžete spustit také z Průzkumník řešení. Nejprve v okně Průzkumník řešení přepněte do zobrazení cílů CMake.

Snímek obrazovky s nabídkou Zobrazení cílů CMake

Zobrazí se Průzkumník řešení. Po kliknutí pravým tlačítkem myši na položku v zobrazení složky se otevřela nabídka, která zobrazuje možnosti, jako je Otevřít, Otevřít s, Porovnat s atd. Položka nabídky Přepnout do zobrazení cílů je zvýrazněná.

Potom klikněte pravým tlačítkem na spustitelný soubor a vyberte Ladit. Tento příkaz automaticky spustí ladění vybraného cíle na základě aktivní konfigurace.

Snímek obrazovky s nabídkou možností zobrazení cílů CMake

Kliknutím pravým tlačítkem myši na cíl v zobrazení cílů CMake se otevřela nabídka s možnostmi, jako je Set as Startup item, Build, Clean All atd. Je zvýrazněná možnost nabídky Ladit.

Od sady Visual Studio 2022 verze 17.6 můžete také spustit ladicí relaci na CMakeLists.txt souboru. Uděláte to tak, že v souboru CMakeLists.txt nastavíte zarážku a v rozevíracím seznamu Projektu spustíte Příkaz Konfigurovat projekt s ladicím programem CMake.

Snímek obrazovky s rozevíracím seznamem Ladicího programu CMake

Zobrazí se rozevírací seznam Projectu. Možnost nabídky Konfigurovat projekt s ladicím programem CMake je zvýrazněná.

Přizpůsobení nastavení ladicího programu

Nastavení ladicího programu můžete přizpůsobit pro jakýkoli spustitelný cíl CMake v projektu. Najdete je v konfiguračním souboru s názvem launch.vs.json, který se nachází ve složce v kořenovém .vs adresáři projektu. Konfigurační soubor spuštění je užitečný ve většině scénářů ladění, protože můžete nakonfigurovat a uložit podrobnosti o nastavení ladění. Tento soubor obsahuje tři vstupní body:

  • Ladicí nabídka: V hlavní nabídce vyberte Nastavení ladění > a spuštění pro ${activeDebugTarget} a přizpůsobte konfiguraci ladění specifickou pro váš aktivní cíl ladění. Pokud nemáte vybraný cíl ladění, tato možnost se zobrazí šedě.

Snímek obrazovky s příkazem nabídky Ladění a spuštěním nastavení projektu

  • Zobrazení cílů: V Průzkumník řešení přejděte do zobrazení Cílů. Potom klikněte pravým tlačítkem na cíl ladění a vyberte Přidat konfiguraci ladění a přizpůsobte konfiguraci ladění specifickou pro vybraný cíl.

Snímek obrazovky s příkazem Přidat konfiguraci ladění v místní nabídce cíle

  • Kořenový CMakeLists.txt: Klikněte pravým tlačítkem na kořenový CMakeLists.txt a vyberte Přidat konfiguraci ladění a otevřete dialogové okno Vybrat ladicí program . Dialogové okno umožňuje přidat libovolný typ konfigurace ladění, ale musíte ručně zadat cíl CMake, který se má vyvolat prostřednictvím projectTarget vlastnosti.

Snímek obrazovky s dialogovým oknem Vybrat ladicí program

Soubor launch.vs.json můžete upravit a vytvořit konfigurace ladění pro libovolný počet cílů CMake. Když soubor uložíte, Visual Studio vytvoří položku pro každou novou konfiguraci v rozevíracím seznamu Po spuštění položky .

Referenční klíče v CMakeSettings.json

Pokud chcete odkazovat na libovolný klíč v souboru CMakeSettings.json , předpište cmake. ho v launch.vs.json. Následující příklad ukazuje jednoduchý soubor launch.vs.json , který načítá hodnotu remoteCopySources klíče v souboru CMakeSettings.json pro aktuálně vybranou konfiguraci:

{
  "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}"]
    }
  ]
}

Proměnné prostředí definované v CMakeSettings.json lze také použít v launch.vs.json pomocí syntaxe ${env.VARIABLE_NAME}. V sadě Visual Studio 2019 verze 16.4 a novějších se cíle ladění automaticky spustí pomocí prostředí, které zadáte v CMakeSettings.json. Proměnnou prostředí můžete zrušit nastavením na hodnotu null.

Referenční informace k Launch.vs.json

Existuje mnoho launch.vs.json vlastností, které podporují všechny scénáře ladění. Následující vlastnosti jsou společné pro všechny konfigurace ladění, vzdálené i místní:

  • projectTarget: Určuje cíl CMake, který se má vyvolat při sestavování projektu. Visual Studio tuto vlastnost automaticky naplní, pokud zadáte launch.vs.json z nabídky ladění nebo zobrazení cílů. Tato hodnota se musí shodovat s názvem existujícího cíle ladění uvedeného v rozevíracím seznamu Po spuštění položky .

  • env: Další proměnné prostředí, které se mají přidat pomocí syntaxe:

    "env": {
          "DEBUG_LOGGING_LEVEL": "trace;info",
          "ENABLE_TRACING": "true"
        }
    
  • args: Argumenty příkazového řádku předané programu k ladění.

referenční informace k Launch.vs.json pro vzdálené projekty a WSL

V sadě Visual Studio 2019 verze 16.6 jsme přidali novou konfiguraci type: cppgdb ladění pro zjednodušení ladění ve vzdálených systémech a WSL. Staré konfigurace ladění jsou stále podporovány type: cppdbg .

Typ konfigurace cppgdb

  • name: Popisný název pro identifikaci konfigurace v rozevíracím seznamu Po spuštění položky .
  • project: Určuje relativní cestu k souboru projektu. Při ladění projektu CMake obvykle nemusíte tuto cestu měnit.
  • projectTarget: Určuje cíl CMake, který se má vyvolat při sestavování projektu. Visual Studio tuto vlastnost automaticky naplní, pokud zadáte launch.vs.json z nabídky ladění nebo zobrazení cílů. Tato cílová hodnota se musí shodovat s názvem existujícího cíle ladění uvedeného v rozevíracím seznamu Po spuštění položky .
  • debuggerConfiguration: Určuje, která sada výchozích hodnot ladění se má použít. V sadě Visual Studio 2019 verze 16.6 je gdbjedinou platnou možností . Visual Studio 2019 verze 16.7 nebo novější podporuje gdbservertaké .
  • args: Argumenty příkazového řádku předané při spuštění programu, který je laděný.
  • env: Další proměnné prostředí předané programu, který je laděný. Například {"DISPLAY": "0.0"}.
  • processID: ID procesu Linuxu, ke které se má připojit. Používá se pouze při připojování ke vzdálenému procesu. Další informace najdete v tématu Řešení potíží s připojením k procesům pomocí GDB.

Další možnosti gdb konfigurace

  • program: Výchozí hodnota "${debugInfo.fullTargetPath}"je . Cesta unixové aplikace k ladění. Vyžaduje se pouze v případě, že se liší od cílového spustitelného souboru v umístění sestavení nebo nasazení.
  • remoteMachineName: Výchozí hodnota "${debugInfo.remoteMachineName}"je . Název vzdáleného systému, který je hostitelem programu pro ladění. Vyžaduje se pouze v případě, že se liší od systému sestavení. Musí mít existující položku v Správce připojení. Stisknutím kombinace kláves Ctrl+Mezerník zobrazíte seznam všech existujících vzdálených připojení.
  • cwd: Výchozí hodnota "${debugInfo.defaultWorkingDirectory}"je . Cesta unixu k adresáři ve vzdáleném systému, kde program je spuštěna. Adresář musí existovat.
  • gdbpath: Výchozí hodnota /usr/bin/gdbje . Úplná cesta unixu gdb k použitému k ladění. Vyžaduje se pouze v případě, že používáte vlastní verzi souboru gdb.
  • preDebugCommand: Příkaz Linuxu, který se má spustit bezprostředně před vyvoláním gdb. gdb se nespustí, dokud se příkaz nedokončí. Můžete použít možnost spustit skript před spuštěním gdb.

Další možnosti povolené s gdbserver konfigurací (16.7 nebo novější)

  • program: Výchozí hodnota "${debugInfo.fullTargetPath}"je . Cesta unixové aplikace k ladění. Vyžaduje se pouze v případě, že se liší od cílového spustitelného souboru v umístění sestavení nebo nasazení.

    Tip

    Nasazení se zatím nepodporuje pro místní scénáře křížové kompilace. Pokud křížově kompilujete ve Windows (například pomocí křížového kompilátoru ve Windows pro sestavení spustitelného souboru ARM pro Linux), budete muset před laděním program ručně zkopírovat binární soubor do umístění určeného na vzdáleném počítači ARM.

  • remoteMachineName: Výchozí hodnota "${debugInfo.remoteMachineName}"je . Název vzdáleného systému, který je hostitelem programu pro ladění. Vyžaduje se pouze v případě, že se liší od systému sestavení. Musí mít existující položku v Správce připojení. Stisknutím kombinace kláves Ctrl+Mezerník zobrazíte seznam všech existujících vzdálených připojení.

  • cwd: Výchozí hodnota "${debugInfo.defaultWorkingDirectory}"je . Úplná cesta unixu k adresáři ve vzdáleném systému, kde program je spuštěna. Adresář musí existovat.

  • gdbPath: Výchozí hodnota ${debugInfo.vsInstalledGdb}je . Úplná cesta windows k gdb použitému k ladění. Výchozí hodnota je nainstalovaná gdb s vývojem pro Linux s úlohou C/C++.

  • gdbserverPath: Výchozí hodnota usr/bin/gdbserverje . Úplná cesta unixu gdbserver k použitému k ladění.

  • preDebugCommand: Příkaz Linuxu, který se má spustit bezprostředně před spuštěním gdbserver. gdbserver se nespustí, dokud se příkaz nedokončí.

Možnosti nasazení

Pomocí následujících možností oddělte svůj buildový počítač (definovaný v CMakeSettings.json) od vzdáleného ladicího počítače.

  • remoteMachineName: Vzdálený ladicí počítač. Vyžaduje se pouze v případě, že se liší od počítače sestavení. Musí mít existující položku v Správce připojení. Stisknutím kombinace kláves Ctrl+Mezerník zobrazíte seznam všech existujících vzdálených připojení.
  • disableDeploy: Výchozí hodnota falseje . Určuje, jestli je zakázané oddělení sestavení nebo ladění. Když falsetato možnost umožňuje sestavení a ladění na dvou samostatných počítačích.
  • deployDirectory: Úplná cesta unixu k adresáři, do remoteMachineName kterého se spustitelný soubor zkopíruje.
  • deploy: Pole upřesňujících nastavení nasazení. Tato nastavení je potřeba nakonfigurovat jenom v případě, že chcete podrobnější kontrolu nad procesem nasazení. Ve výchozím nastavení se do vzdáleného ladicího počítače nasadí jenom soubory potřebné pro proces ladění.
    • sourceMachine: Počítač, ze kterého se soubor nebo adresář zkopíruje. Stisknutím kombinace kláves Ctrl+Mezerník zobrazíte seznam všech vzdálených připojení uložených v Správce připojení. Při vytváření nativně ve WSL se tato možnost ignoruje.
    • targetMachine: Počítač, do kterého se soubor nebo adresář zkopíruje. Stisknutím kombinace kláves Ctrl+Mezerník zobrazíte seznam všech vzdálených připojení uložených v Správce připojení.
    • sourcePath: Umístění souboru nebo adresáře na .sourceMachine
    • targetPath: Umístění souboru nebo adresáře na .targetMachine
    • deploymentType: Popis typu nasazení. LocalRemote a RemoteRemote jsou podporovány. LocalRemote znamená kopírování z místního systému souborů do vzdáleného systému určeného remoteMachineName v launch.vs.json. RemoteRemote znamená kopírování ze vzdáleného systému sestavení určeného v CMakeSettings.json do jiného vzdáleného systému určeného v launch.vs.json.
    • executable: Určuje, jestli je nasazený soubor spustitelný.

Spouštění vlastních gdb příkazů

Visual Studio podporuje spouštění vlastních gdb příkazů pro přímou interakci s podkladovým ladicím programem. Další informace naleznete v tématu Spouštění vlastních gdb příkazů lldb.

Povolit protokolování

Povolte protokolování MIEngine, abyste zjistili, na jaké příkazy se odesílají gdb, do jakého výstupu gdb se vrátí a jak dlouho každý příkaz trvá. Další informace

Typ konfigurace cppdbg

Následující možnosti lze použít při ladění ve vzdáleném systému nebo WSL pomocí cppdbg typu konfigurace. V sadě Visual Studio 2019 verze 16.6 nebo novější se doporučuje typ cppgdb konfigurace.

  • name: Popisný název pro identifikaci konfigurace v rozevíracím seznamu Po spuštění položky .

  • project: Určuje relativní cestu k souboru projektu. Při ladění projektu CMake obvykle tuto hodnotu nemusíte měnit.

  • projectTarget: Určuje cíl CMake, který se má vyvolat při sestavování projektu. Visual Studio tuto vlastnost automaticky naplní, pokud zadáte launch.vs.json z nabídky ladění nebo zobrazení cílů. Tato hodnota se musí shodovat s názvem existujícího cíle ladění uvedeného v rozevíracím seznamu Po spuštění položky .

  • args: Argumenty příkazového řádku předané při spuštění programu, který je laděný.

  • processID: ID procesu Linuxu, ke které se má připojit. Používá se pouze při připojování ke vzdálenému procesu. Další informace najdete v tématu Řešení potíží s připojením k procesům pomocí GDB.

  • program: Výchozí hodnota "${debugInfo.fullTargetPath}"je . Cesta unixové aplikace k ladění. Vyžaduje se pouze v případě, že se liší od cílového spustitelného souboru v umístění sestavení nebo nasazení.

  • remoteMachineName: Výchozí hodnota "${debugInfo.remoteMachineName}"je . Název vzdáleného systému, který je hostitelem programu pro ladění. Vyžaduje se pouze v případě, že se liší od systému sestavení. Musí mít existující položku v Správce připojení. Stisknutím kombinace kláves Ctrl+Mezerník zobrazíte seznam všech existujících vzdálených připojení.

  • cwd: Výchozí hodnota "${debugInfo.defaultWorkingDirectory}"je . Úplná cesta unixu k adresáři ve vzdáleném systému, kde program je spuštěna. Adresář musí existovat.

  • environment: Další proměnné prostředí předané programu, který je laděný. Příklad:

      "environment": [
          {
            "name": "ENV1",
            "value": "envvalue1"
          },
          {
            "name": "ENV2",
            "value": "envvalue2"
          }
        ]
    
  • pipeArgs: Pole argumentů příkazového řádku předaných programu kanálu ke konfiguraci připojení. Program kanálu se používá k předávání standardního vstupu a výstupu mezi sadou Visual Studio a gdb. Většina tohoto pole se při ladění projektů CMake nemusí přizpůsobovat . Výjimkou je ${debuggerCommand}, který se spustí gdb ve vzdáleném systému. Dá se upravit na:

    • Exportujte hodnotu proměnné prostředí DISPLAY v systému Linux. V následujícím příkladu je :1tato hodnota .

      "pipeArgs": [
          "/s",
          "${debugInfo.remoteMachineId}",
          "/p",
          "${debugInfo.parentProcessId}",
          "/c",
          "export DISPLAY=:1;${debuggerCommand}",
          "--tty=${debugInfo.tty}"
        ],
      
    • Před spuštěním gdbskriptu spusťte skript . Ujistěte se, že jsou ve vašem skriptu nastavená oprávnění ke spuštění.

      "pipeArgs": [
          "/s",
          "${debugInfo.remoteMachineId}",
          "/p",
          "${debugInfo.parentProcessId}",
          "/c",
          "/path/to/script.sh;${debuggerCommand}",
          "--tty=${debugInfo.tty}"
        ],
      
  • stopOnEntry: Logická hodnota, která určuje, jestli se má proces přerušit, jakmile se proces spustí. Výchozí hodnotou je hodnota false.

  • visualizerFile: Soubor .natvis, který se má použít při ladění tohoto procesu. Tato možnost není kompatibilní s pěkným tiskem gdb . Tato vlastnost je také nastavena showDisplayString při nastavování této vlastnosti.

  • showDisplayString: Logická hodnota, která umožňuje zobrazovaný řetězec při visualizerFile zadání. Nastavením této možnosti true můžete během ladění způsobit pomalejší výkon.

  • setupCommands: Jeden nebo více gdb příkazů, které se mají provést, pro nastavení základního ladicího programu.

  • miDebuggerPath: Úplná cesta k gdb. Pokud není zadaný, Visual Studio nejprve vyhledá ladicí program PATH.

  • Nakonec můžete použít cppdbg také všechny možnosti nasazení definované pro cppgdb typ konfigurace.

Ladění pomocí gdbserver

Konfiguraci můžete nakonfigurovat cppdbg pro ladění pomocí gdbserver. Další podrobnosti a ukázkovou konfiguraci spuštění najdete v blogovém příspěvku týmu Microsoft C++ o ladění projektů CMake Linuxu pomocí gdbserver.