首页 > 解决方案 > C++ Visual Studio 代码:调试以 NullReferenceException 终止:对象引用未设置为对象的实例

问题描述

我在 Visual Studio Code 中调试 C++ 时遇到了一些问题。

NullReferenceException: Object reference not set to an instance of an object如果我尝试查看某个变量,它会崩溃。

起初我认为这可能是因为该变量已声明const,因此编译器可能会将其编译掉,但其他const-variables 很好(我也使用-g -O0)。

这是我的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": "g++ build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/src/build_optimizer",
            "args": [ ],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}/build/src",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "miDebuggerPath": "gdb"
        }
    ]
}

我用谷歌搜索,似乎这个错误在两三年前很常见,但据说它已在 Visual Studio C++ 扩展中修复。

我已经删除了扩展并重新安装了它。删除了我的 CMake 构建文件夹等。

任何想法可能导致此问题?

这是导致麻烦的变量:

const std::unordered_map<Item, int32_t> missing_items = Utility::get_missing_items(goal_pair, goal_recipe, initial_items);

和:

std::unordered_map<Item, int32_t> Utility::get_missing_items(const std::pair<Item, int32_t>& goal_item, const Recipe& recipe,
                                                             const std::unordered_map<Item, int32_t> &current_items) {
    
    std::unordered_map<Item, int32_t> return_map;

    /* do things */

    return return_map;
}

我看不出这怎么可能是空的。即使它为空,Visual Studio Code 不应该将其显示为 nullptr 吗?

标签: c++debuggingvisual-studio-codevscode-debugger

解决方案


推荐阅读