Hope an function of calling valgrind and such tools for checking memory errors be integrated in launch templates or debug options.
This would be done with an additional task in tasks.json.
You can use
valgrind --vgdb-error=0 ./<program name>
and you will get
==374== Memcheck, a memory error detector
==374== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==374== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==374== Command: ./<program name>
==374==
==374== (action at startup) vgdb me ...
==374==
==374== TO DEBUG THIS PROCESS USING GDB: start GDB like this
==374== /path/to/gdb ./<program name>
==374== and then give GDB the following command
==374== target remote | /usr/lib/valgrind/../../bin/vgdb --pid=<PID>
==374== --pid is optional if only one valgrind process is running
==374==
==374== error calling PR_SET_PTRACER, vgdb might block
then you can use setupCommands in launch.json to run
-target-select remote | /usr/lib/valgrind/../../bin/vgdb
This would be done with an additional task in
tasks.json.You can use
valgrind --vgdb-error=0 ./<program name>and you will get
==374== Memcheck, a memory error detector ==374== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==374== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==374== Command: ./<program name> ==374== ==374== (action at startup) vgdb me ... ==374== ==374== TO DEBUG THIS PROCESS USING GDB: start GDB like this ==374== /path/to/gdb ./<program name> ==374== and then give GDB the following command ==374== target remote | /usr/lib/valgrind/../../bin/vgdb --pid=<PID> ==374== --pid is optional if only one valgrind process is running ==374== ==374== error calling PR_SET_PTRACER, vgdb might blockthen you can use
setupCommandsinlaunch.jsonto run-target-select remote | /usr/lib/valgrind/../../bin/vgdb* assuming you have one vgdb process running.
Could you describe it in detail. I tried your method, but it didn't work.
I would also like valgrind integration, maybe as an option in for launch.json like gdb.
a bit of a hack but worked for me
add the following to launch.json configs
{
"name": "valgrind",
"program": "${env:HOME}/templates/valgrind_complete",
"cwd": "${workspaceFolder}",
"type": "cppdbg",
"request": "launch",
"preLaunchTask": "valgrind C"
}
and the following to tasks.json
{
"label": "valgrind C",
"type": "shell",
"command": "valgrind '${fileDirname}/${fileBasenameNoExtension}'",
"presentation": {
"reveal": "always",
"panel": "shared",
"clear": true
},
"group": {
"kind": "build",
"isDefault": true
}
}
note that "${env:HOME}/templates/valgrind_complete" points to a complied c program that just prints "valgrind complete". It could be empty. you'll find the valgrind output in the terminal drop down at the bottom of vscode
Here is the launch.json that worked for me:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) valgrind remote-target",
"type": "cppdbg",
"request": "launch",
"program": "/path/to/program",
"targetArchitecture": "x64",
"customLaunchSetupCommands" : [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Attach to valgrind",
"text": "target remote | /usr/lib64/valgrind/../../bin/vgdb",
"ignoreFailures": false
}
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb"
},
]
}
Update /path/to/program to point to the program you want to debug.
To make it work, I run valgrind prog [ arg ... ] in a shell window where prog is the program to debug (i.e. /path/to/prog) followed by any command line arguments. For some reason, it did not work for me without the targetArchitecture option.