leoluz / nvim-dap-go

An extension for nvim-dap providing configurations for launching go debugger (delve) and debugging individual tests
MIT License
479 stars 78 forks source link

debug project with custom structure #63

Open amirphl opened 9 months ago

amirphl commented 9 months ago

I have a project with such a structure: project/ |-- cmd/ | |-- main.go |-- service/ | |-- company/ | |-- service.go |-- repo/

I normally run the project using this command: go run ./cmd serve Here. serve is just an argument.

Problematic Scenarios When placing a breakpoint in a function in service.go, the debugging process fails because the build command is incorrect: go build -o <path-to-executable> -gcflags all=-N -l <path-to>/service/company/service.go This command is invalid as it attempts to compile a file that does not contain the main function.

Conversely, when navigating to main.go and attempting to debug, the generated build command is also incorrect: go build -o <path-to-executable> -gcflags all=-N -l <path-to>/cmd/main.go It should instead execute: go build -o <path-to-executable> -gcflags all=-N -l <path-to>/cmd serve

I appreciate any help to fix the problem.

amirphl commented 9 months ago

Current Solution I have successfully resolved my debugging issue by temporarily injecting the serve keyword into os.Args. Subsequently, I run "Debug Package" from the main.go file, which works as a temporary workaround.

Desired Enhancement I am seeking a more flexible solution that allows me to run "Debug Package" from any source file, not just restricted to main.go. For instance, I am unable to initiate "Debug Package" from my service.go.

stale[bot] commented 3 months ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

leoluz commented 3 months ago

@amirphl please check if delve.build_flags configuration addresses your use-case. If it doesn't, I currently don't have the time to implement it but feel free to push a PR in the repo.