godotengine / godot-csharp-visualstudio

Godot C# extension for Visual Studio
MIT License
245 stars 27 forks source link

[WIP] Godot4 Visual Studio 2022 Guide #48

Open GeorgeS2019 opened 1 year ago

GeorgeS2019 commented 1 year ago

Update March 2023

Firstly you need to create a new debugging profile Menu > Debug > Debug Properties

Selecting executable as a new profile type in the top corner of the profile configurator.

[Optional] Rename the executable profile

Reference

Launch

in the command line --path . --verbose

Launch (select scene)

in the command line --path . scene.tscn --verbose

Launch (select Script)

in the command line --path . --script <script> --verbose

Editor

in the command line --path . --editor --verbose

Optionals

[1] Make GD.Print appear in the program output window (To be verified)

Include GD.cs ==> Need to update GD.cs to the lastest Godot4 rc2 [Debugging Godot4 beta projects from VS and VSCode](https://www.reddit.com/r/godot/comments/xhirp8/debugging_godot4_beta_projects_from_vs_and_vscode/) > I haven't found a fix for the first issue, but I've shared a [GD.cs](https://gist.github.com/SilentPenguin/bf24eb348c9d00c34605d1cc54318be7) to pipe GD.Print functions to the output window. Just drop it into your project folder if you want that.

[2] Hot Reload (To be verified)

[3] Debug Editor Tool (To be verified)

If you want to also be able to debug editor tools add another profile and use the same arguments but add --editor as well.

--path . --editor in the command line

Update Oct 2022

Debugging Godot4 beta projects from VS2022 [Run+Debug Godot4 C# projects from Visual Studio](https://www.reddit.com/r/GodotCSharp/comments/xgpqfh/oc_rundebug_godot4_c_projects_from_visual_studio/) [Debugging Godot4 beta projects from VS and VSCode](https://www.reddit.com/r/godot/comments/xhirp8/debugging_godot4_beta_projects_from_vs_and_vscode/) [Is this Obsolete? VS2022 works with Godot 4.Beta1 no extension needed](https://github.com/godotengine/godot-csharp-visualstudio/issues/42)
silenuz commented 1 year ago

After entering the working directory you have to scroll down and check the box that says Enable native code debugging. This is missing from your instructions.

GeorgeS2019 commented 1 year ago

@silenuz I read through a few links, there are reasons WHEN and WHEN not to click => Enable Native code debugging.

silenuz commented 1 year ago

Without checking it you cannot debug unmanaged code. The Godot application itself is not managed code. And the process you are attaching the debugger to is the Godot exe and not the c# project. Thus for debugging to work you have to enable Native Debugging Mode.

"The following procedures describe how to enable debugging for managed and native code together, also known as mixed-mode debugging. There are two mixed-mode debugging scenarios:

The app that calls a DLL is written in native code, and the DLL is managed."

Mixed Mode Debugging

GeorgeS2019 commented 1 year ago

Suggestion for command line arguments

Here for gathering references related to what are possible with the executable profile

https://github.com/godotengine/godot-docs

silenuz commented 1 year ago

I would like to mention that a more universal approach than using . as the working directory, and path variables, is to use $(ProjectDir) which will allow the same profile to be used in Rider as well as Visual Studio.

For reference here is a complete launch file that should be compatible with VS, VS Code and Rider. All that has to be adjusted is the executable path for Godot. Note to use in VS code you would add this to your .vscode/launch.json file.

"launchSettingsProfile": "${workspaceFolder}/<Relative-Path-To-Project-Directory/Properties/launchSettings.json

For more information see: VS Code Debug

So the following file would go in a folder called properties in the project folder and be called launchsettings.json


{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "Player": {
      "commandName": "Executable",
      "executablePath": "godot",
      "commandLineArgs": "--path $(ProjectDir)",
      "workingDirectory": "$(ProjectDir)",
      "nativeDebugging": true
    },
    "Editor": {
      "commandName": "Executable",
      "executablePath": "godot",
      "commandLineArgs": "--path $(ProjectDir) --editor",
      "workingDirectory": "$(ProjectDir)",
      "nativeDebugging": true
    }
  }
}
silenuz commented 1 year ago

If anyone cares I ended up creating a DotNet project template for Godot. Usage is simple: dotnet new Godot -o {NameOfProject} -G {PathToGodtotExe}

This will create a project that already has the necessary launch settings for running or debugging your code in Visual Studio or Jetbrains' Rider. Note once installed the template will also be available in the above IDEs.

After the project is generated simply open it in the Godot editor as usual.

I'm currently working on packaging for easier use, and hope to have that finished by the end of the weekend. Godot project Template

UradaSources commented 11 months ago

When selecting the executable file of godot, you cannot select the _console version, otherwise the breakpoint cannot be hit.