VSCode中Go编译遭杀毒软件拦截,如何配置编译路径?
问题:Go编译临时文件被企业杀毒软件拦截导致编译失败
在Windows 10系统上使用VSCode 1.76.0-insiders版本开发Go程序,Go v1.20编译器会将编译过程中的临时文件输出到系统临时文件夹(如C:\Temp\go-build2738799206\b001\exe\a.out.exe),该操作被企业杀毒软件拦截,导致编译失败。需要解决两个问题:
- 修改launch.json配置,让编译产物输出到源码所在目录
- 企业环境下Go编译器适配杀毒软件的其他解决方案
调试控制台输出
Starting: C:\Users\user01\go\bin\dlv.exe dap --only-same-user=false --listen=127.0.0.1:56552 from C:\projects\go.tfs-exporter DAP server listening at: 127.0.0.1:56552 Build Error: go build -o C:\projects\go.app\__debug_bin.exe -gcflags all=-N -l . tfs-exporter: go build go.app: open C:\Temp\go-build2738799206\b001\exe\a.out.exe: Access is denied. (exit status 1)
当前launch.json配置
{ "version": "0.2.0", "configurations": [ { "name": "Launch Package", "type": "go", "request": "launch", "mode": "auto", "program": "${workspaceFolder}", "dlvFlags": [ "--only-same-user=false" ] } ] }
解决方案
一、修改launch.json让编译产物输出到源码目录
直接在现有launch.json的配置项里添加一行"output": "${workspaceFolder}/__debug_bin.exe",指定编译输出到源码所在目录。修改后的配置如下:
{ "version": "0.2.0", "configurations": [ { "name": "Launch Package", "type": "go", "request": "launch", "mode": "auto", "program": "${workspaceFolder}", "dlvFlags": [ "--only-same-user=false" ], "output": "${workspaceFolder}/__debug_bin.exe" } ] }
改完之后,Delve会直接把编译好的二进制文件输出到你的工作目录,跳过系统临时文件夹的生成环节,避免被杀毒软件拦截。
二、企业环境下的其他适配方法
- 修改Go的临时编译目录:设置
GOTMPDIR环境变量,把Go编译时的临时文件目录改成源码目录下的自定义文件夹(比如.tmp)。VSCode终端里临时设置的话,执行:
也可以在系统环境变量里永久配置,之后记得让IT把这个目录加入杀毒软件信任列表。set GOTMPDIR=C:\projects\go.tfs-exporter\.tmp - 申请杀毒软件信任规则:联系企业IT部门,把Go默认的临时编译路径(
C:\Temp\go-build*)或者你自定义的GOTMPDIR目录加到杀毒软件的白名单里,允许该目录下的文件创建和执行操作。 - 预编译后调试:提前手动编译好二进制文件,调试时直接运行现成的文件。可以把launch.json的
mode改成exec,指定program为你预编译好的exe路径:{ "name": "Launch Executable", "type": "go", "request": "launch", "mode": "exec", "program": "${workspaceFolder}/your-app.exe", "dlvFlags": [ "--only-same-user=false" ] }
内容的提问来源于stack exchange,提问作者Alex F
相关产品推荐
相关产品推荐

