程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

VSCode Python/C++ 混合Debug

編輯:Python

VSCode Python/C++ 混合Debug

  • 修改 set_up.py將c++編譯為debug info模式
  • 配置launch.json
  • 拿到pid
  • Troubleshoot attaching to processes using GDB
  • 開始debug
  • docker中使用這套流程

修改 set_up.py將c++編譯為debug info模式

主要是修改setup.py中ext_modules模塊
分別在extra_compile_argsextra_link_args中添加’-g’,此處表示為debug模式,如果此時編譯,後面進入c++代碼後會不停地跳,原因是因為c++編譯的時候會自動優化,所以還需要gcc編譯的時候不讓它優化,因此還需要添加’-O0’,這樣就可以正確debug c or c++代碼了。
修改之後代碼為

ext_modules = [
Pybind11Extension("sampler_core",
['sampler_core.cpp'],
extra_compile_args = ['-fopenmp','-g','-O0'],
extra_link_args = ['-fopenmp','-g'],),
]

然後重新編譯一下即可

配置launch.json

先在vscode上安裝插件C/C++ Extension Pack,然後把launch.json修改如下

{
// 使用 IntelliSense 了解相關屬性。
// 懸停以查看現有屬性的描述。
// 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Attach",
"type": "cppdbg",
"request": "attach",
"program": "/home/amax/anaconda3/envs/torch/bin/python", //-- 修改這一欄為你執行pytorch的python路徑
"processId": "${command:pickProcess}",
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": false
}
]
}

拿到pid

在python調用C++的代碼處加斷點(當然也可以使用pdb在代碼裡pdb.set_trace()),使用

  • os.getpid()
  • ps -ef | grep python

Troubleshoot attaching to processes using GDB

使用網頁中第一種方式解決

開始debug

  • vscode c++ debug vector顯示不全的解決方案
  • 最簡單的方法:*(type(*)[size])array_name
  • 其他方法還有打開pretty-printer的方式,看上去需要配置,沒去嘗試了

docker中使用這套流程

還沒嘗試,zz同學應該試成功


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved