microsoft / microsoft/vscode-cpptools

Disassembly View: wrong current instruction and wrong address in breakpoint command sent to GDB

Open
#13,002 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

debugger help wanted
Dominant language
TypeScript
Stars
6.2k
Forks
1.7k
Avg merge
14h 46m
Merged PRs (30d)
61

Description

Environment
  • OS and version: Windows 11 22631.4460
  • VS Code: 1.95.3
  • C/C++ extension: v1.22.11
  • OS and version of remote machine (if applicable): none
  • GDB / LLDB version: GDB 15.2 from MSYS2 mingw-w64-ucrt-x86_64-gdb-multiarch
Bug Summary and Steps to Reproduce

Referencing the screenshots below:

  • the 0x1b6 breakpoint was created via the disassembly view, by clicking on the 0x1b6 row which I wanted to break on
  • T1: after restarting the target, the disassembly view shows the breakpoint bound to 0x00000142 instead
    • notice the logs showing it indeed sent a GDB command to bind to 0x142 (322 decimal)
  • T1: pc register shows that GDB indeed halted on 0x142, but the disassembly shows the current instruction to be 0x000001a8
  • T2: after stepping over once, the disassembly view changes to 64bit long addresses and does not show the disassembled instructions
    • note how the current instruction address now matches the pc register
    • this happens quite often and seems to be consistent based on the instructions being debugged

Screenshot T1
Image

Screenshot T2
Image

I am developing for CH32V003 RISC-V 32bit MCU, using:

Debugger Configurations
launch.json:
{
    "name": "Launch (minichlink)",
    "type": "cppdbg",
    "request": "launch",
    "cwd": "${workspaceFolder}",
    "program": "${workspaceRoot}/build/firmware.elf",
    // "stopAtEntry": true,
    "debugServerPath": "${workspaceFolder}/minichlink.exe",
    "debugServerArgs": "-aG",
    "MIMode": "gdb",
    "miDebuggerPath": "E:/msys64/ucrt64/bin/gdb-multiarch.exe",
    "miDebuggerServerAddress": "localhost:2000",
    "setupCommands": [
        {
            "text": "-enable-pretty-printing",
            "ignoreFailures": true,
        },
    ],
    "svdPath": "${workspaceFolder}/CH32V003xx.svd",
    "logging": {
        "engineLogging": true,
        "trace": true,
        "traceResponse": true
    }
}
Debugger Logs
https://pastebin.com/gUCjBxwv
Other Extensions

Cortex-Debug and other related extensions are installed, but disabling all of them does not make a difference.

Additional Information

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the issue with the supplied launch.json configuration and inspect the GDB engine logs linked in the report. Compare the breakpoint address, pc register, current instruction, and disassembly after stepping; done means the requested address is sent to GDB and the disassembly remains correct and populated.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, typescript
Domain
devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.