Hello! Even though GNU Radio has python bindings with swig or pybind11, the underlying code c++ symbols are still accessible with GDB. Using Visual Studio Code and GNU Radio compiled from source with Debug Symbols this is pretty straightforward: 1) Open up the source tree of gnuradio in visual studio code 2) edit the launch.json and add a C++/GDB configuration where program is python and args is the output of the GRC rendering { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "/usr/bin/python3", "args": ["/path/to/grc_output.py"], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] }, 3) put the breakpoint where you want to hit - note that GR will have been compiled with optimizations, so the breakpoints might be a bit funky 4) F5 to run the application
If you are debugging your own OOT, this makes it even simpler because you can compile as "-DCMAKE_BUILD_TYPE=Debug" and then your breakpoints will be very predictable - in this case you just open up VS code from the root of your project and follow the same steps. Hope this helps. Josh On Tue, Aug 3, 2021 at 8:41 AM 能书能言 <2127629...@qq.com> wrote: > Hi guys! > I want to know how to debug c++ code in gnuradio. As far as I know, after > we run GRC, a Python file will be generated. The Python file connects > various blocks, but if I debug this Python file directly, I cannot observe > the internal operations of the C++ block. I want to know if there is any > way to let me Can I see the contents of the c++work function when I run the > python file? It's like executing a pure Python or pure C++ program. > If this is not possible because of the swig connection method, how can I > observe the work of a C++ block's work function? If I look at the code > directly, it is definitely not accurate enough. Can I write a demo by > myself? Or other ways. > In addition, how to edit an existing block? I just want to modify its > function slightly. Do I have to use gr_modtool to create a new OOT module > and rewrite it based on the contents of the original block? You must also > use debugging methods when writing, but I don't know how to do it. > in addition. I have tried the tutorials on the official website, but none > of them worked. I also checked the previous mailing list, but it was not > very helpful. I think anyone has a better solution? > Sincerely > >