VSCode dbg 将本地进程附加到调试 C# dll 使用的 C dll
VSCode dbg attach local process to debug C dll which is used by C# dll
我想调试 C DLL quickfuncs.dll
,由 MinGW64 在 VSCode 中使用 -g(调试符号)编译。此 DLL 由 C# DLL(也使用调试符号编译)使用,它由以下人员运行:
"C:\Program Files\dotnet\dotnet.exe" exec "D:\Server\bin\Debug\netcoreapp2.0\Server.dll" Parameter1=test
我根据https://github.com/Microsoft/vscode-cpptools/blob/master/launch.md
配置了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": "(gdb) Attach to process",
"type": "cppdbg",
"request": "attach",
"program": "C:/Program Files/dotnet/dotnet.exe",
"processId": "${command:pickProcess}",
"MIMode": "gdb",
"miDebuggerPath": "c:/msys2/mingw64/bin/gdb.exe",
"targetArchitecture": "x64",
"additionalSOLibSearchPath": "${workspaceFolder}/bin/Debug/win64/;d:\Server\src\Server\WorkingDirectory\",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false,
}
],
"logging": {
"trace": true,
"traceResponse": true
},
}
]
}
附加进程后,无法使用此日志设置断点:
C setBreakpoints: {"source":{"name":"api.c","path":"D:\c_code\quickfuncs\api.c"},"lines":[246],"breakpoints":[{"line":246}],"sourceModified":false}
R: {"success":true,"message":null,"request_seq":11,"command":"setBreakpoints","body":{"breakpoints":[{"id":3,"verified":true,"line":246,"message":null}]},"running":false,"refs":null,"seq":0,"type":"response"}
E breakpoint: {"reason":"changed","breakpoint":{"id":3,"verified":false,"line":246,"message":"Attempting to bind the breakpoint...."},"type":"breakpoint"}
你能帮帮我吗?
我在 https://github.com/Microsoft/vscode-cpptools/issues/2452 上找到了解决方案。
pieandcakes 写道:
With MinGW you have to send Ctrl+C to the debuggee to pause. The pause
button doesn't work because we can't send SIGINT through gdb
's
MI protocol. The command we typically use is -exec-interrupt
but
that doesn't work. The procedure (unfortunately) is:
- Hit
pause
in the UI
- Go to the debuggee and press
Ctrl+c
.
At that point the debuggee should stop. It is only then that the
breakpoints bind.
这个解决方案适合我。非常感谢。
我想调试 C DLL quickfuncs.dll
,由 MinGW64 在 VSCode 中使用 -g(调试符号)编译。此 DLL 由 C# DLL(也使用调试符号编译)使用,它由以下人员运行:
"C:\Program Files\dotnet\dotnet.exe" exec "D:\Server\bin\Debug\netcoreapp2.0\Server.dll" Parameter1=test
我根据https://github.com/Microsoft/vscode-cpptools/blob/master/launch.md
配置了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": "(gdb) Attach to process",
"type": "cppdbg",
"request": "attach",
"program": "C:/Program Files/dotnet/dotnet.exe",
"processId": "${command:pickProcess}",
"MIMode": "gdb",
"miDebuggerPath": "c:/msys2/mingw64/bin/gdb.exe",
"targetArchitecture": "x64",
"additionalSOLibSearchPath": "${workspaceFolder}/bin/Debug/win64/;d:\Server\src\Server\WorkingDirectory\",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false,
}
],
"logging": {
"trace": true,
"traceResponse": true
},
}
]
}
附加进程后,无法使用此日志设置断点:
C setBreakpoints: {"source":{"name":"api.c","path":"D:\c_code\quickfuncs\api.c"},"lines":[246],"breakpoints":[{"line":246}],"sourceModified":false}
R: {"success":true,"message":null,"request_seq":11,"command":"setBreakpoints","body":{"breakpoints":[{"id":3,"verified":true,"line":246,"message":null}]},"running":false,"refs":null,"seq":0,"type":"response"}
E breakpoint: {"reason":"changed","breakpoint":{"id":3,"verified":false,"line":246,"message":"Attempting to bind the breakpoint...."},"type":"breakpoint"}
你能帮帮我吗?
我在 https://github.com/Microsoft/vscode-cpptools/issues/2452 上找到了解决方案。
pieandcakes 写道:
With MinGW you have to send Ctrl+C to the debuggee to pause. The pause button doesn't work because we can't send SIGINT through
gdb
's MI protocol. The command we typically use is-exec-interrupt
but that doesn't work. The procedure (unfortunately) is:
- Hit
pause
in the UI- Go to the debuggee and press
Ctrl+c
.At that point the debuggee should stop. It is only then that the breakpoints bind.
这个解决方案适合我。非常感谢。