You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode中GDB调试C++代码忽略自定义断点仅在std::sort()处中断

问题:Leetcode提交WA、VSCode输出不一致且GDB调试断点异常

问题现象

  • Leetcode提交代码出现Wrong Answer,返回随机值(如[752,24624])
  • 迁移至VSCode运行后,输出结果与Leetcode完全不同(仅输出0)
  • 使用GDB调试时,自定义断点被忽略,仅在std::sort()及其头文件调用处中断;已确认编译时添加-g参数,文件路径无非ASCII字符

代码实现

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int binSearch(vector<int*> nums, int t) {
        int l = 0, r = nums.size(), m = 0;
        
            while (l < r) {
            m = floor((l+r)/2);
            if (*nums[m] > t) {
                r = m;
            } else {
                l = m+1;
            }
        }
        return r-1;
    }
    
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int*> copy;
        int ans[2];
        
        for (int i = 0; i < nums.size(); i++) {
            copy.push_back(&nums[i]);
        }
        
        sort(copy.begin(), copy.end(), [](int* a, int* b) { return *a < *b; });
        for (auto j : copy) {
            cout << *j;
        }
        
        for (int i = 0; i < copy.size(); i++) {
            int index = binSearch(copy, target - *copy[i]);
            if (index < 0) { continue; }
            if (nums[index] == target - *copy[i]) {
                ans[0] = distance(&nums[0], copy[i]);
                ans[1] = distance(&nums[0], copy[index]);
                break;
            }
        }
        
        vector<int> out(ans, ans+2);
        return out;
    }
};

int main() {
    vector<int> v{0,4,3,0};
    Solution sol;

    vector<int> ans = sol.twoSum(v, 0);

    cout << ans[0] << endl << ans[1];

    return 0;
}

VSCode Launch配置

{
            "name": "C/C++: g++.exe build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "targetArchitecture": "x86_64",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            /*"logging": {
                "moduleLoad": true,
                "programOutput": true,
                "trace": true,
                "traceResponse": true,
                "engineLogging": true
            },*/
            "preLaunchTask": "C/C++: g++.exe build active file"
        },

输出差异

  • Leetcode输出:[752,24624](疑似未初始化数组的随机值)
  • VSCode输出:0

问题分析与解决建议

1. 输出不一致的根源

代码核心问题在于未初始化的数组和逻辑错误:

  • int ans[2];未初始化,若循环未触发break,会返回随机值,这是Leetcode输出异常的直接原因
  • binSearch使用值传递拷贝指针数组,效率低下且无必要;同时floor((l+r)/2)在整数运算中多余,可能导致索引计算偏差
  • 判断条件nums[index] == target - *copy[i]逻辑错误:index是拷贝数组的索引,而非原数组nums的索引,应改为*copy[index]比较
  • distance(&nums[0], copy[index])依赖指针计算索引,不如直接保存原数组索引可靠

2. GDB断点被忽略的解决办法

  • 检查编译任务配置,确保添加-g且未启用优化(-O系列参数会导致断点失效),示例编译任务:
    {
        "label": "C/C++: g++.exe build active file",
        "type": "shell",
        "command": "g++",
        "args": [
            "-g",
            "${file}",
            "-o",
            "${fileDirname}\\${fileBasenameNoExtension}.exe"
        ],
        "options": {
            "cwd": "${fileDirname}"
        },
        "problemMatcher": ["$gcc"],
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }
    
  • 修正launch配置中program路径的转义符(原配置中\需改为\\)
  • 删除已生成的exe文件,重新编译后再调试
  • 确保MinGW的gdb与gcc版本匹配,避免版本不兼容问题

内容的提问来源于stack exchange,提问作者shamwoah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:50:10