Cortex-Debug: VSCode debugger extension version 1.12.1 git(652d042). Usage info: https://github.com/Marus/cortex-debug#usage
"configuration": {
"gdbPath": "/Users/nebel/Library/Arduino15/packages/XMiniCore/tools/avrocd-tools/1.5.5/avr-gdb",
"objdumpPath": "/Users/nebel/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-objdump",
"overrideGDBServerStartedRegex": "Listening on port \\d+ for gdb connection",
"preLaunchCommands": [
"monitor debugwire enable"
],
"runToEntryPoint": "main",
"serverArgs": [
"-s",
"/Users/nebel/Library/Arduino15/packages/XMiniCore/tools/avrocd-tools/1.5.5/bin/simavr",
"-d",
"atmega328p",
"-m",
"all",
"-F",
"16000000L",
"--atexit",
"leave"
],
"configId": "XMiniCore:avr:atmega328p_xplained_mini:clock=16MHz,debug=leave,eeprom=keep:programmer=simavr",
"name": "Arduino: XMiniCore:avr:atmega328p_xplained_mini:clock=16MHz,debug=leave,eeprom=keep (simavr)",
"cwd": "/Users/nebel/Documents/Arduino/static",
"request": "launch",
"type": "cortex-debug",
"showDevDebugOutput": "raw",
"executable": "/Users/nebel/Documents/Arduino/static/build/static.ino.elf",
"servertype": "openocd",
"serverpath": "/Users/nebel/Library/Arduino15/packages/XMiniCore/tools/avrocd-tools/1.5.5/pyavrocd",
"armToolchainPath": "/Users/nebel/Library/Arduino15/packages/XMiniCore/tools/avrocd-tools/1.5.5",
"configFiles": [
"nix"
],
"svdFile": "/Users/nebel/Library/Arduino15/packages/XMiniCore/tools/avrocd-tools/1.5.5/pyavrocd-util/svd/atmega328p.svd",
"__configurationTarget": 6,
"gdbServerConsolePort": 55878,
"pvtAvoidPorts": [],
"chainedConfigurations": {
"enabled": false
},
"debuggerArgs": [],
"swoConfig": {
"enabled": false,
"decoders": [],
"cpuFrequency": 0,
"swoFrequency": 0,
"source": "probe"
},
"rttConfig": {
"enabled": false,
"decoders": []
},
"graphConfig": [],
"postLaunchCommands": [],
"preAttachCommands": [],
"postAttachCommands": [],
"preRestartCommands": [],
"postRestartCommands": [],
"preResetCommands": [],
"postResetCommands": [],
"searchDir": [],
"toolchainPath": "/Users/nebel/Library/Arduino15/packages/XMiniCore/tools/avrocd-tools/1.5.5",
"toolchainPrefix": "arm-none-eabi",
"extensionPath": "/Users/nebel/.vscode/extensions/marus25.cortex-debug-1.12.1",
"registerUseNaturalFormat": true,
"variableUseNaturalFormat": true,
"pvtVersion": "1.12.1",
"__sessionId": "ba632499-359c-452f-b48a-de2327ab013e",
"pvtShowDevDebugOutput": "raw"
}
Reading symbols from /Users/nebel/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-objdump --syms -C -h -w /Users/nebel/Documents/Arduino/static/build/static.ino.elf
Reading symbols from /Users/nebel/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-nm --defined-only -S -l -C -p /Users/nebel/Documents/Arduino/static/build/static.ino.elf
Launching GDB: /Users/nebel/Library/Arduino15/packages/XMiniCore/tools/avrocd-tools/1.5.5/avr-gdb -q --interpreter=mi2
1-gdb-version
Launching gdb-server: /Users/nebel/Library/Arduino15/packages/XMiniCore/tools/avrocd-tools/1.5.5/pyavrocd -c "gdb_port 50017" -c "tcl_port 50018" -c "telnet_port 50019" -s /Users/nebel/Documents/Arduino/static -f /Users/nebel/.vscode/extensions/marus25.cortex-debug-1.12.1/support/openocd-helpers.tcl -f nix -s /Users/nebel/Library/Arduino15/packages/XMiniCore/tools/avrocd-tools/1.5.5/bin/simavr -d atmega328p -m all -F 16000000L --atexit leave
Please check TERMINAL tab (gdb-server) for output from /Users/nebel/Library/Arduino15/packages/XMiniCore/tools/avrocd-tools/1.5.5/pyavrocd
Finished reading symbols from objdump: Time: 112 ms
Finished reading symbols from nm: Time: 107 ms
-> =thread-group-added,id="i1"
-> ~"GNU gdb (GDB) 17.1.4\n"
-> ~"Copyright (C) 2025 Free Software Foundation, Inc.\n"
-> ~"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law."
-> ~"\nType \""
-> ~"show copying\" and \"show warranty\" for details.\n"
-> ~"This GDB was configured as \"--host=aarch64-apple-darwin24.6.0 --target=avr\".\n"
-> ~"Type \"show configuration\" for configuration details.\n"
-> ~"For bug reporting instructions, please see:\n"
-> ~"<https://www.gnu.org/software/gdb/bugs/>.\n"
-> ~"Find the GDB manual and other documentation resources online at:\n <"
-> ~"http://www.gnu.org/software/gdb/documentation/>.\n\n"
-> ~"For help, type \"help\".\n"
-> ~"Type \"apropos word\" to search for commands related to \"word\".\n"
-> 1^done
2-gdb-set mi-async on
-> 2^done
3-interpreter-exec console "set print demangle on"
-> 3^done
4-interpreter-exec console "set print asm-demangle on"
-> =cmd-param-changed,param="print asm-demangle",value="on"
-> 4^done
5-enable-pretty-printing
-> 5^done
6-interpreter-exec console "source /Users/nebel/.vscode/extensions/marus25.cortex-debug-1.12.1/support/gdbsupport.init"
-> 6^done
7-interpreter-exec console "source /Users/nebel/.vscode/extensions/marus25.cortex-debug-1.12.1/support/gdb-swo.init"
-> =cmd-param-changed,param="language",value="c"
-> =cmd-param-changed,param="language",value="auto"
-> 7^done
8-interpreter-exec console "set output-radix 0xa"
-> ~"Output radix now set to decimal 10, hex a, octal 12.\n"
Output radix now set to decimal 10, hex a, octal 12.
-> 8^done
9-interpreter-exec console "set input-radix 0xa"
-> ~"Input radix now set to decimal 10, hex a, octal 12.\n"
Input radix now set to decimal 10, hex a, octal 12.
-> 9^done
10-file-exec-and-symbols "/Users/nebel/Documents/Arduino/static/build/static.ino.elf"
-> 10^done
11-target-select extended-remote localhost:50017
-> =thread-group-started,id="i1",pid="42000"
-> =thread-created,id="1",group-id="i1"
-> ~"0x00000000 in __vectors ()\n"
0x00000000 in __vectors ()
-> *stopped,frame={addr="0x00000000",func="__vectors",args=[],arch="avr:5"},thread-id="1",stopped-threads="all"
mi2.status = stopped
Program stopped, probably due to a reset and/or halt issued by debugger
-> 11^connected
12-interpreter-exec console "monitor debugwire enable"
-> @"Monitor subcommands are: ior halt reset\n"
Monitor subcommands are: ior halt reset
-> 12^done
13-interpreter-exec console "monitor reset halt"
-> 13^done
14-target-download
-> 14+download,{section=".text",section-size="2562",total-size="16616"}
-> 14+download,{section=".text",section-sent="48",section-size="2562",total-sent="48",total-size="16616"}
-> 14+download,{section=".data",section-size="14",total-size="16616"}
-> 14^done,address="0x00000000",load-size="2576",transfer-rate="355304",write-rate="46"
15-interpreter-exec console "monitor reset halt"
-> 15^done
16-break-insert "/Users/nebel/Documents/Arduino/static/static.ino:12"
-> ~"Note: automatically using hardware breakpoints for read-only addresses.\n"
Note: automatically using hardware breakpoints for read-only addresses.
-> 16^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x000003da",func="loop",file="/Users/nebel/Documents/Arduino/static/static.ino",fullname="/Users/nebel/Documents/Arduino/static/static.ino",line="12",thread-groups=["i1"],times="0",original-location="/Users/nebel/Documents/Arduino/static/static.ino:12"}
Returning dummy thread-id to workaround VSCode issue with pause button not working
Returning dummy stack frame to workaround VSCode issue with pause button not working: {"threadId":1,"startFrame":0,"levels":20}
17-break-insert -t --function main
-> 17^done,bkpt={number="2",type="breakpoint",disp="del",enabled="y",addr="0x00000582",func="main",file="/Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp",fullname="/Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp",line="35",thread-groups=["i1"],times="0",original-location="-function main"}
18-exec-continue --all
-> 18^running
-> *running,thread-id="all"
mi2.status = running
-> =breakpoint-modified,bkpt={number="2",type="breakpoint",disp="del",enabled="y",addr="0x00000582",func="main",file="/Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp",fullname="/Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp",line="35",thread-groups=["i1"],times="1",original-location="-function main"}
-> ~"\n"
-> ~"Temporary breakpoint 2, main () at /Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp:35\n"
Temporary breakpoint 2, main () at /Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp:35
-> ~"35\t init();\n"
35 init();
-> *stopped,reason="breakpoint-hit",disp="del",bkptno="2",frame={addr="0x00000582",func="main",args=[],file="/Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp",fullname="/Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp",line="35",arch="avr:5"},thread-id="1",stopped-threads="all"
mi2.status = stopped
-> =breakpoint-deleted,id="2"
19-thread-list-ids
-> 19^done,thread-ids={thread-id="1"},current-thread-id="1",number-of-threads="1"
20-thread-info 1
-> 20^done,threads=[{id="1",target-id="Thread <main>",frame={level="0",addr="0x00000582",func="main",args=[],file="/Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp",fullname="/Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp",line="35",arch="avr:5"},state="stopped"}]
21-stack-list-frames --thread 1 0 19
-> 21^done,stack=[frame={level="0",addr="0x00000582",func="main",file="/Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp",fullname="/Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp",line="35",arch="avr:5"}]
22-stack-info-frame --thread 1 --frame 0
-> 22^done,frame={level="0",addr="0x00000582",func="main",file="/Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp",fullname="/Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp",line="35",arch="avr:5"}
23-stack-list-variables --thread 1 --frame 0 --simple-values
-> 23^done,variables=[]
24-exec-continue --thread 1
-> 24^running
-> *running,thread-id="all"
mi2.status = running
-> =breakpoint-modified,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x000003da",func="loop",file="/Users/nebel/Documents/Arduino/static/static.ino",fullname="/Users/nebel/Documents/Arduino/static/static.ino",line="12",thread-groups=["i1"],times="1",original-location="/Users/nebel/Documents/Arduino/static/static.ino:12"}
-> ~"\n"
-> ~"Breakpoint 1, loop () at /Users/nebel/Documents/Arduino/static/static.ino:12\n"
Breakpoint 1, loop () at /Users/nebel/Documents/Arduino/static/static.ino:12
-> ~"12\t int local_ontime = random(100,1000);\n"
12 int local_ontime = random(100,1000);
-> *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",frame={addr="0x000003da",func="loop",args=[],file="/Users/nebel/Documents/Arduino/static/static.ino",fullname="/Users/nebel/Documents/Arduino/static/static.ino",line="12",arch="avr:5"},thread-id="1",stopped-threads="all"
mi2.status = stopped
25-thread-list-ids
-> 25^done,thread-ids={thread-id="1"},current-thread-id="1",number-of-threads="1"
26-thread-info 1
-> 26^done,threads=[{id="1",target-id="Thread <main>",frame={level="0",addr="0x000003da",func="loop",args=[],file="/Users/nebel/Documents/Arduino/static/static.ino",fullname="/Users/nebel/Documents/Arduino/static/static.ino",line="12",arch="avr:5"},state="stopped"}]
27-stack-list-frames --thread 1 0 19
-> 27^done,stack=[frame={level="0",addr="0x000003da",func="loop",file="/Users/nebel/Documents/Arduino/static/static.ino",fullname="/Users/nebel/Documents/Arduino/static/static.ino",line="12",arch="avr:5"},frame={level="1",addr="0x0000058e",func="main",file="/Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp",fullname="/Users/nebel/Library/Arduino15/packages/MiniCore/hardware/avr/3.1.2/cores/MCUdude_corefiles/main.cpp",line="46",arch="avr:5"}]
28-stack-info-frame --thread 1 --frame 0
-> 28^done,frame={level="0",addr="0x000003da",func="loop",file="/Users/nebel/Documents/Arduino/static/static.ino",fullname="/Users/nebel/Documents/Arduino/static/static.ino",line="12",arch="avr:5"}
29-stack-list-variables --thread 1 --frame 0 --simple-values
-> 29^done,variables=[{name="local_ontime",type="int",value="<optimized out>"},{name="factor",type="float",value="1"}]
30-var-create --thread 1 --frame 0 var_local_ontime_4096 @ "local_ontime"
-> 30^done,name="var_local_ontime_4096",numchild="0",value="<optimized out>",type="int",has_more="0"
31-var-create --thread 1 --frame 0 var_factor_4096 @ "factor"
-> 31^done,name="var_factor_4096",numchild="0",value="1",type="float",has_more="0"
32-stack-info-frame --thread 1 --frame 0
-> 32^done,frame={level="0",addr="0x000003da",func="loop",file="/Users/nebel/Documents/Arduino/static/static.ino",fullname="/Users/nebel/Documents/Arduino/static/static.ino",line="12",arch="avr:5"}
info addr ontime
33-interpreter-exec console "info addr ontime"
-> ~"Symbol \"ontime\" is static storage at address 0x800100.\n"
Symbol "ontime" is static storage at address 0x800100.
-> 33^done
{"output":"","token":33,"outOfBandRecord":[],"resultRecords":{"resultClass":"done","results":[]}}
34-stack-info-frame --thread 1 --frame 0
-> 34^done,frame={level="0",addr="0x000003da",func="loop",file="/Users/nebel/Documents/Arduino/static/static.ino",fullname="/Users/nebel/Documents/Arduino/static/static.ino",line="12",arch="avr:5"}
35-stack-list-variables --thread 1 --frame 0 --simple-values
-> 35^done,variables=[{name="local_ontime",type="int",value="<optimized out>"},{name="factor",type="float",value="1"}]
36-stack-info-frame --thread 1 --frame 0
-> 36^done,frame={level="0",addr="0x000003da",func="loop",file="/Users/nebel/Documents/Arduino/static/static.ino",fullname="/Users/nebel/Documents/Arduino/static/static.ino",line="12",arch="avr:5"}
37-var-update --thread 1 --frame 0 --all-values var_local_ontime_4096
-> 37^done,changelist=[]
38-var-update --thread 1 --frame 0 --all-values var_factor_4096
-> 38^done,changelist=[]
Describe the bug
Gobal static variable is not shown under
StaticheadingTo Reproduce
Steps to reproduce the behavior:
static.ino(see below)Static: ./static.inovariable categoryExpected behavior
The variables
ontimeand_varyshould be shownScreenshots
Environment (please complete the following information):
Please include
launch.jsonNote: We are unlikely to look at the issue if you do not supply this
Attach text from
Debug ConsolePlease enable debug output in your launch.json (
"showDevDebugOutput": "raw"). It this is too large, please attach it as a fileAdditional context
It looks similar to Static variables don't show #929. However, here GDB is not even asked for the variables.
I checked the output of avr-objdump and avr-nm, which looks as follows (concerning
ontime):00800100 l O .data 00000002 ontime00800100 00000002 d ontimeThe list of global variables is also empty because LTO elevated all global variables to static ones. I guess that is something that one can not do much about it. However, it would be great if these variables could at least be shown as static variables.
As a side remark: I tried that out with AVR-GCC 15.1 and got the same result.
I attached a description of how to reproduce the error using a simulator. This should work on Mac/Linux/Windows.
reproduce-no-static.md
Arduino sketch
static.ino: