microsoft / microsoft/vscode-cpptools

Watch Window expressions can fail due to `permissive-` compiler flag

Aperta
#14,455 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

debugger
Lingua principale
TypeScript
Stelle
6.2k
Fork
1.7k
Merge medio
14h 46m
PR unite (30g)
61

Descrizione

Environment
  • OS and Version: Microsoft Windows 10 Pro (Version 10.0.19045 Build 19045)
  • VS Code Version: 1.120.0
  • C/C++ Extension Version: 1.32.2
  • Visual Studio Version: Community 2026 version 18.5.2
Bug Summary and Steps to Reproduce

Bug Summary:
Certain expressions have started failing to display in the Watch Window for me - please see attached repro code and instructions, thanks!

Image

Steps to reproduce:

  1. Requires Visual Studio installation to call cl.exe
  2. Download and unzip example code: VSCodeWatchWindowTest.zip
  3. Launch VS Code from x64 Native Tools Command Prompt for VS
  4. Open example code
  5. Run default build task
  6. Place breakpoint in main.cpp on line 19
  7. Start debugging
  8. Look in locals window - result evaluates as An unspecified error has occurred. If you add it to the watch window it is shown as identifier "result" is undefined
    Expected behavior:
    Contents of result are displayed properly
Debugger Configurations
tasks.json:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "./build.bat",
            "problemMatcher": [
                "$msCompile"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "clear": true
            }
        },
    ]
}

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": "(Windows) Launch",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/main.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "logging": { 
                "engineLogging": true,
                "trace": true,
                "traceResponse": true
            },
            "console": "internalConsole"
        }
    ]
}
Debugger Logs
<- (E) {"seq":3,"type":"event","event":"output","body":{"category":"console","output":"------------------------------------------------------------------------------\nYou may only use the C/C++ Extension for Visual Studio Code with Visual Studio\nCode, Visual Studio or Visual Studio for Mac software to help you develop and\ntest your applications.\n------------------------------------------------------------------------------\n","severity":"ok"}}
------------------------------------------------------------------------------
You may only use the C/C++ Extension for Visual Studio Code with Visual Studio
Code, Visual Studio or Visual Studio for Mac software to help you develop and
test your applications.
------------------------------------------------------------------------------
<- (R) {"seq":5,"type":"response","request_seq":2,"success":true,"command":"launch"}
-> (C) {"type":"response","seq":1,"command":"handshake","request_seq":2,"success":true,"body":{"signature":"625UmCEnCH6afVSxs9jB9jEatNAO2Zna7Ez9NQ637quWD0="}}
<- (E) {"seq":8,"type":"event","event":"initialized","body":{}}
-> (C) {"command":"setBreakpoints","arguments":{"source":{"name":"main.cpp","path":"c:\\Users\\Kevin\\Documents\\Programming\\VSCodeWatchWindowTest\\main.cpp"},"lines":[19],"breakpoints":[{"line":19}],"sourceModified":false},"type":"request","seq":3}
<- (E) {"seq":11,"type":"event","event":"output","body":{"category":"telemetry","output":"vs/diagnostics/debugger/vsdbg/BreakpointAdded","data":{"VS.Diagnostics.Debugger.vsdbg.OSFamily":"Windows","VS.Diagnostics.Debugger.vsdbg.Version":"17.13.20115.1 commit:2813ca575686dd74c298baf93407e693cefabef1","VS.Diagnostics.Debugger.vsdbg.BreakpointAdded.HasHitCount":false,"VS.Diagnostics.Debugger.vsdbg.WindowsVersion":"10.0.19045","VS.Diagnostics.Debugger.vsdbg.AdapterId":"cppvsdbg","VS.Diagnostics.Debugger.vsdbg.BreakpointAdded.BreakpointType":"Source","VS.Diagnostics.Debugger.vsdbg.BreakpointAdded.HasLogMessage":false,"VS.Diagnostics.Debugger.vsdbg.BreakpointAdded.HasCondition":false}}}
<- (R) {"seq":13,"type":"response","request_seq":3,"success":true,"command":"setBreakpoints","body":{"breakpoints":[{"id":1,"verified":false,"message":"The breakpoint is pending and will be resolved when debugging starts.","line":19}]}}
-> (C) {"command":"setFunctionBreakpoints","arguments":{"breakpoints":[]},"type":"request","seq":4}
<- (R) {"seq":16,"type":"response","request_seq":4,"success":true,"command":"setFunctionBreakpoints","body":{"breakpoints":[]}}
-> (C) {"command":"setInstructionBreakpoints","arguments":{"breakpoints":[]},"type":"request","seq":5}
<- (R) {"seq":19,"type":"response","request_seq":5,"success":true,"command":"setInstructionBreakpoints","body":{"breakpoints":[]}}
-> (C) {"command":"setExceptionBreakpoints","arguments":{"filters":[],"filterOptions":[]},"type":"request","seq":6}
<- (R) {"seq":22,"type":"response","request_seq":6,"success":true,"command":"setExceptionBreakpoints","body":{}}
-> (C) {"command":"configurationDone","type":"request","seq":7}

<- (E) {"seq":25,"type":"event","event":"output","body":{"category":"telemetry","output":"VS/Diagnostics/Debugger/vsdbg/ProcessCreate","data":{"VS.Diagnostics.Debugger.vsdbg.OSFamily":"Windows","VS.Diagnostics.Debugger.vsdbg.Version":"17.13.20115.1 commit:2813ca575686dd74c298baf93407e693cefabef1","VS.Diagnostics.Debugger.vsdbg.WindowsVersion":"10.0.19045","VS.Diagnostics.Debugger.vsdbg.TargetArchitecture":"AMD64"}}}
<- (E) {"seq":27,"type":"event","event":"process","body":{"name":"C:\\Users\\Kevin\\Documents\\Programming\\VSCodeWatchWindowTest\\build\\main.exe","systemProcessId":17092,"startMethod":"launch","pointerSize":64}}
<- (E) {"seq":29,"type":"event","event":"breakpoint","body":{"reason":"changed","breakpoint":{"id":1,"verified":false,"message":"No symbols have been loaded for this document.","line":19}}}
<- (R) {"seq":31,"type":"response","request_seq":7,"success":true,"command":"configurationDone"}
-> (C) {"command":"threads","type":"request","seq":8}
<- (R) {"seq":34,"type":"response","request_seq":8,"success":true,"command":"threads","body":{"threads":[]}}
<- (E) {"seq":36,"type":"event","event":"output","body":{"category":"console","output":"main.exe (17092): Loaded 'C:\\Users\\Kevin\\Documents\\Programming\\VSCodeWatchWindowTest\\build\\main.exe'. Symbols loaded.\n","outputRoutingOption":"outputChannel"}}
main.exe (17092): Loaded 'C:\Users\Kevin\Documents\Programming\VSCodeWatchWindowTest\build\main.exe'. Symbols loaded.
<- (E) {"seq":38,"type":"event","event":"module","body":{"reason":"new","module":{"id":1000,"name":"main.exe","path":"C:\\Users\\Kevin\\Documents\\Programming\\VSCodeWatchWindowTest\\build\\main.exe","isUserCode":true,"symbolStatus":"Symbols loaded.","symbolFilePath":"C:\\Users\\Kevin\\Documents\\Programming\\VSCodeWatchWindowTest\\build\\main.pdb"}}}
<- (E) {"seq":40,"type":"event","event":"breakpoint","body":{"reason":"changed","breakpoint":{"id":1,"verified":true,"source":{"name":"main.cpp","path":"C:\\Users\\Kevin\\Documents\\Programming\\VSCodeWatchWindowTest\\main.cpp","sourceReference":0,"checksums":[{"algorithm":"SHA256","checksum":"5916b8062e703c3220e18ca4d4c4e11e7ed826dc9fc4a89fb302ab90b270a1ee"}]},"line":19,"endLine":19,"instructionReference":"0x00007FF67163102B","offset":0}}}
<- (E) {"seq":42,"type":"event","event":"thread","body":{"reason":"started","threadId":12696}}
<- (E) {"seq":44,"type":"event","event":"output","body":{"category":"console","output":"main.exe (17092): Loaded 'C:\\Windows\\System32\\ntdll.dll'. \n","outputRoutingOption":"outputChannel"}}
main.exe (17092): Loaded 'C:\Windows\System32\ntdll.dll'. 
<- (E) {"seq":46,"type":"event","event":"module","body":{"reason":"new","module":{"id":1001,"name":"ntdll.dll","path":"C:\\Windows\\System32\\ntdll.dll","isUserCode":false,"version":"10.0.19041.7291 (WinBuild.160101.0800)","symbolStatus":"Cannot find or open the PDB file."}}}
<- (E) {"seq":48,"type":"event","event":"output","body":{"category":"console","output":"main.exe (17092): Loaded 'C:\\Windows\\System32\\kernel32.dll'. \n","outputRoutingOption":"outputChannel"}}
main.exe (17092): Loaded 'C:\Windows\System32\kernel32.dll'. 
<- (E) {"seq":50,"type":"event","event":"module","body":{"reason":"new","module":{"id":1002,"name":"kernel32.dll","path":"C:\\Windows\\System32\\kernel32.dll","isUserCode":false,"version":"10.0.19041.7291 (WinBuild.160101.0800)","symbolStatus":"Cannot find or open the PDB file."}}}
<- (E) {"seq":52,"type":"event","event":"output","body":{"category":"console","output":"main.exe (17092): Loaded 'C:\\Windows\\System32\\KernelBase.dll'. \n","outputRoutingOption":"outputChannel"}}
main.exe (17092): Loaded 'C:\Windows\System32\KernelBase.dll'. 
<- (E) {"seq":54,"type":"event","event":"module","body":{"reason":"new","module":{"id":1003,"name":"KernelBase.dll","path":"C:\\Windows\\System32\\KernelBase.dll","isUserCode":false,"version":"10.0.19041.7291 (WinBuild.160101.0800)","symbolStatus":"Cannot find or open the PDB file."}}}
<- (E) {"seq":56,"type":"event","event":"thread","body":{"reason":"started","threadId":14600}}
<- (E) {"seq":58,"type":"event","event":"thread","body":{"reason":"started","threadId":11936}}
<- (E) {"seq":60,"type":"event","event":"output","body":{"category":"console","output":"main.exe (17092): Loaded 'C:\\Windows\\System32\\vcruntime140d.dll'. \n","outputRoutingOption":"outputChannel"}}

main.exe (17092): Loaded 'C:\Windows\System32\vcruntime140d.dll'. 
<- (E) {"seq":62,"type":"event","event":"module","body":{"reason":"new","module":{"id":1004,"name":"vcruntime140d.dll","path":"C:\\Windows\\System32\\vcruntime140d.dll","isUserCode":false,"version":"14.50.35719.0","symbolStatus":"Cannot find or open the PDB file."}}}
<- (E) {"seq":64,"type":"event","event":"output","body":{"category":"console","output":"main.exe (17092): Loaded 'C:\\Windows\\System32\\ucrtbased.dll'. \n","outputRoutingOption":"outputChannel"}}
main.exe (17092): Loaded 'C:\Windows\System32\ucrtbased.dll'. 
<- (E) {"seq":66,"type":"event","event":"module","body":{"reason":"new","module":{"id":1005,"name":"ucrtbased.dll","path":"C:\\Windows\\System32\\ucrtbased.dll","isUserCode":false,"version":"10.0.26100.7705 (WinBuild.160101.0800)","symbolStatus":"Cannot find or open the PDB file."}}}
<- (E) {"seq":68,"type":"event","event":"thread","body":{"reason":"started","threadId":19060}}
<- (E) {"seq":70,"type":"event","event":"output","body":{"category":"telemetry","output":"VS/Diagnostics/Debugger/vsdbg/Launch","data":{"VS.Diagnostics.Debugger.vsdbg.OSFamily":"Windows","VS.Diagnostics.Debugger.vsdbg.Version":"17.13.20115.1 commit:2813ca575686dd74c298baf93407e693cefabef1","VS.Diagnostics.Debugger.vsdbg.VisualizerFileUsed":false,"VS.Diagnostics.Debugger.vsdbg.WindowsVersion":"10.0.19045","VS.Diagnostics.Debugger.vsdbg.TargetType":"Live","VS.Diagnostics.Debugger.vsdbg.AdapterId":"cppvsdbg","VS.Diagnostics.Debugger.vsdbg.SourceFileMappings":0,"VS.Diagnostics.Debugger.vsdbg.Launch.DebuggerStartTime":187}}}
<- (E) {"seq":72,"type":"event","event":"stopped","body":{"reason":"breakpoint","threadId":12696,"allThreadsStopped":true,"hitBreakpointIds":[1],"source":{"name":"main.cpp","path":"C:\\Users\\Kevin\\Documents\\Programming\\VSCodeWatchWindowTest\\main.cpp"},"line":19,"column":0}}
-> (C) {"command":"threads","type":"request","seq":9}
<- (R) {"seq":75,"type":"response","request_seq":9,"success":true,"command":"threads","body":{"threads":[{"id":12696,"name":"Main Thread"},{"id":14600,"name":"ntdll.dll thread"},{"id":11936,"name":"ntdll.dll thread"},{"id":19060,"name":"ntdll.dll thread"}]}}
-> (C) {"command":"stackTrace","arguments":{"threadId":12696,"startFrame":0,"levels":20},"type":"request","seq":10}
<- (R) {"seq":78,"type":"response","request_seq":10,"success":true,"command":"stackTrace","body":{"stackFrames":[{"id":1000,"name":"main.exe!doFoo(vec3 pos) Line 19","source":{"name":"main.cpp","path":"C:\\Users\\Kevin\\Documents\\Programming\\VSCodeWatchWindowTest\\main.cpp","sourceReference":0,"checksums":[{"algorithm":"SHA256","checksum":"5916b8062e703c3220e18ca4d4c4e11e7ed826dc9fc4a89fb302ab90b270a1ee"}]},"line":19,"column":1,"endLine":19,"endColumn":0,"instructionPointerReference":"0x00007FF67163102B","moduleId":1000},{"id":1001,"name":"main.exe!doBar(Bar * bar) Line 22","source":{"name":"main.cpp","path":"C:\\Users\\Kevin\\Documents\\Programming\\VSCodeWatchWindowTest\\main.cpp","sourceReference":0,"checksums":[{"algorithm":"SHA256","checksum":"5916b8062e703c3220e18ca4d4c4e11e7ed826dc9fc4a89fb302ab90b270a1ee"}]},"line":22,"column":1,"endLine":22,"endColumn":0,"instructionPointerReference":"0x00007FF67163109B","moduleId":1000},{"id":1002,"name":"main.exe!main() Line 28","source":{"name":"main.cpp","path":"C:\\Users\\Kevin\\Documents\\Programming\\VSCodeWatchWindowTest\\main.cpp","sourceReference":0,"checksums":[{"algorithm":"SHA256","checksum":"5916b8062e703c3220e18ca4d4c4e11e7ed826dc9fc4a89fb302ab90b270a1ee"}]},"line":28,"column":1,"endLine":28,"endColumn":0,"instructionPointerReference":"0x00007FF671631110","moduleId":1000},{"id":1003,"name":"main.exe!invoke_main() Line 79","source":{"name":"exe_common.inl","path":"D:\\a\\_work\\1\\s\\src\\vctools\\crt\\vcstartup\\src\\startup\\exe_common.inl","sourceReference":0,"checksums":[{"algorithm":"SHA256","checksum":"06302037b260f066fed492d8bb29ef08d9906fd3afb9dd34a71b9c4c537a9dbc"}]},"line":79,"column":1,"endLine":79,"endColumn":0,"instructionPointerReference":"0x00007FF6716315C9","moduleId":1000},{"id":1004,"name":"main.exe!__scrt_common_main_seh() Line 288","source":{"name":"exe_common.inl","path":"D:\\a\\_work\\1\\s\\src\\vctools\\crt\\vcstartup\\src\\startup\\exe_common.inl","sourceReference":0,"checksums":[{"algorithm":"SHA256","checksum":"06302037b260f066fed492d8bb29ef08d9906fd3afb9dd34a71b9c4c537a9dbc"}]},"line":288,"column":1,"endLine":288,"endColumn":0,"instructionPointerReference":"0x00007FF6716314E2","moduleId":1000},{"id":1005,"name":"main.exe!__scrt_common_main() Line 331","source":{"name":"exe_common.inl","path":"D:\\a\\_work\\1\\s\\src\\vctools\\crt\\vcstartup\\src\\startup\\exe_common.inl","sourceReference":0,"checksums":[{"algorithm":"SHA256","checksum":"06302037b260f066fed492d8bb29ef08d9906fd3afb9dd34a71b9c4c537a9dbc"}]},"line":331,"column":1,"endLine":331,"endColumn":0,"instructionPointerReference":"0x00007FF67163139E","moduleId":1000},{"id":1006,"name":"main.exe!mainCRTStartup(void * __formal) Line 17","source":{"name":"exe_main.cpp","path":"D:\\a\\_work\\1\\s\\src\\vctools\\crt\\vcstartup\\src\\startup\\exe_main.cpp","sourceReference":0,"checksums":[{"algorithm":"SHA256","checksum":"f4f590f440ba7bf9472debd09278df41dbb87be3e4ee224be6fc2b2edb515f7b"}]},"line":17,"column":1,"endLine":17,"endColumn":0,"instructionPointerReference":"0x00007FF67163163E","moduleId":1000},{"id":1007,"name":"kernel32.dll!00007fff4dfd7374()","line":0,"column":0,"instructionPointerReference":"0x00007FFF4DFD7374","moduleId":1002},{"id":1008,"name":"ntdll.dll!00007fff4f73cc91()","line":0,"column":0,"instructionPointerReference":"0x00007FFF4F73CC91","moduleId":1001}],"totalFrames":9}}
-> (C) {"command":"threads","type":"request","seq":11}

<- (R) {"seq":81,"type":"response","request_seq":11,"success":true,"command":"threads","body":{"threads":[{"id":12696,"name":"Main Thread"},{"id":14600,"name":"ntdll.dll thread"},{"id":11936,"name":"ntdll.dll thread"},{"id":19060,"name":"ntdll.dll thread"}]}}
-> (C) {"command":"evaluate","arguments":{"expression":"result","frameId":1000,"context":"watch"},"type":"request","seq":12}
<- (E) {"seq":84,"type":"event","event":"output","body":{"category":"telemetry","output":"VS/Diagnostics/Debugger/vsdbg/Evaluate","data":{"VS.Diagnostics.Debugger.vsdbg.Evaluation.IsError":true,"VS.Diagnostics.Debugger.vsdbg.Evaluation.Duration":15,"VS.Diagnostics.Debugger.vsdbg.OSFamily":"Windows","VS.Diagnostics.Debugger.vsdbg.Version":"17.13.20115.1 commit:2813ca575686dd74c298baf93407e693cefabef1","VS.Diagnostics.Debugger.vsdbg.WindowsVersion":"10.0.19045","VS.Diagnostics.Debugger.vsdbg.AdapterId":"cppvsdbg"}}}
<- (R) {"seq":86,"type":"response","request_seq":12,"success":true,"command":"evaluate","body":{"result":"identifier \"result\" is undefined","presentationHint":{"attributes":["readOnly","failedEvaluation"]},"variablesReference":0}}
-> (C) {"command":"scopes","arguments":{"frameId":1000},"type":"request","seq":13}
<- (R) {"seq":89,"type":"response","request_seq":13,"success":true,"command":"scopes","body":{"scopes":[{"name":"Locals","variablesReference":1000,"expensive":false},{"name":"Registers","presentationHint":"registers","variablesReference":1001,"expensive":true}]}}
-> (C) {"command":"variables","arguments":{"variablesReference":1000},"type":"request","seq":14}
<- (R) {"seq":92,"type":"response","request_seq":14,"success":true,"command":"variables","body":{"variables":[{"name":"pos","value":"{x=0.00000000 y=0.00000000 z=0.00000000 }","type":"vec3","presentationHint":{"kind":"data","attributes":["readOnly"]},"evaluateName":"pos","variablesReference":1002},{"name":"result","value":"An unspecified error has occurred.","presentationHint":{"attributes":["readOnly","failedEvaluation"]},"evaluateName":"result","variablesReference":0}]}}
Other Extensions

No response

Additional Information

No response

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Scarica ed esegui VSCodeWatchWindowTest.zip usando il task di build di tasks.json e la configurazione di launch.json. Inizia dalla riga 19 di main.cpp e confronta i risultati di Watch/Locals con le impostazioni del compilatore usate da build.bat, in particolare il flag permissive-. Il lavoro è completato quando result viene valutato come il suo contenuto nella Watch Window invece di segnalare un identificatore non definito.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
cpp, vscode
Ambito
devtools
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Attiva
Chiarezza
Abbastanza chiara
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.