cmake 错误:无法启动调试,命令“-exec-run”的意外GDB输出,无法找到进程ID 1401的Mach任务端口

egdjgwm8  于 2022-11-24  发布在  Mac
关注(0)|答案(6)|浏览(690)

我尝试使用GDB在C++项目的VSCode中运行调试器,但在运行调试器时总是出现此错误。我已经设置了一个证书和所有东西,但它仍然给我此错误(我运行的是macOS Catalina 版本10.15.4)。
下面是我的launch.json文件

{
   // Use IntelliSense to learn about possible attributes.
   // Hover to view descriptions of existing attributes.
   // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/Assignment8",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

下面是我的tasks.json文件

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "echo",
            "type": "shell",
            "command": "make",
            "options": {
                "cwd": "${workspaceFolder}/build"
            },
        }
    ]
}

另外,我看到了一些关于创建.gdbinit文件的内容,我在根目录中创建了该文件,并在其中放置了以下命令:

set startup-with-shell off

任何帮助这个问题将不胜感激。

7rtdyuoh

7rtdyuoh1#

我也有同样的问题。或多或少是这样的:
错误:无法启动调试。命令“-exec-run”的意外GDB输出。创建进程/usr/bin/时出错,(错误2)。
要修复,请尝试使用较低版本的gcc / g++(v_9左右),特别是较低版本的gdb(v_10,安装的实验版本是问题,改为9.3和OK)。

b4lqfgs4

b4lqfgs42#

json中的“program”参数应该是可调试可执行文件的路径。
我猜你使用的是g++。如果你使用-g开关,你的程序将是可调试的。因此你的编译将是

g++ -g path/to/prog.cpp -o a.out

这将使可调试的可执行文件成为“a.out”。
确保“program”参数指向该文件。

"program": "${workspaceFolder}/a.out

我希望你是遵循所有这些步骤。

svgewumm

svgewumm3#

在我的例子中,这个问题似乎与gdb 10. 2 -1直接相关,将gdb降级到9. 2 -1瞬间解决了这个问题。

ohfgkhjo

ohfgkhjo4#

我也遇到过类似的问题。问题是文件夹的名字上有重音符号(),比如path/to/elétron。解决办法是去掉重音符号。改为path/to/eletron

n53p2ov0

n53p2ov05#

尝试使用此文件结构

> SomeFolder   
  > .vscode    
    - tasks.json    
    - launch.json  
> MainFolder   
    - main.cpp    
    - main.exe

launch.json

"version": "0.2.0",
"configurations": [
    {
        "name": "DEBUG",
        "type": "cppdbg",
        "request": "launch",
        "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "args": [],
        "stopAtEntry": false,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "externalConsole": false,
        "MIMode": "gdb",
        "miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe",
        "setupCommands": [
            {
                "description": "gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            }
        ],
        "preLaunchTask": "C/C++: g++.exe build active file"
    }
]

}
tasks.json

{
"tasks": [
    {
        "type": "shell",
        "label": "C/C++: g++.exe build active file",
        "command": "C:\\MinGW\\bin\\g++.exe",
        "args": [
            "-g",
            "${file}",
            "-o",
            "${fileDirname}\\${fileBasenameNoExtension}.exe"
        ],
        "options": {
            "cwd": "${workspaceFolder}"
        },
        "problemMatcher": [
            "$gcc"
        ],
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }
],
"version": "2.0.0"

}

nmpmafwu

nmpmafwu6#

2022年11月更新

我尝试了前面的答案中描述的降级选项,但没有效果。结果发现,问题是由以下事实引起的:在macOS的最新版本中,达尔文内核限制了一个进程控制另一个进程的能力,而这正是gdb调试器必须做的。
解决方案是对gdb二进制文件进行代码签名。
有关如何执行此操作的说明,请参见https://sourceware.org/gdb/wiki/PermissionsDarwin

**注意:**使用brew安装gdb实际上现在警告您此要求。以下摘录嵌入在安装后打印的消息中,并引用了完全相同的URL。

==> Caveats
gdb requires special privileges to access Mach ports.
You will need to codesign the binary. For instructions, see:

  https://sourceware.org/gdb/wiki/PermissionsDarwin
  • 功劳:这个问题也在Visual Code GitHub论坛here上讨论,我在那里找到了GDB wiki的解决方案链接。*

相关问题