Hi,
Thank you very much for your suggestions, this is exactly what I want, I am a 
novice, do not have a lot of experience in program debugging, and there are 
some details I haven't figured out.


Step 1: Open the source tree in VScode. What does the source tree here refer 
to? A directory? I am using GNUradio built from source installation. Which 
directory should I open? Is it the one before or after the installation? Where 
is the source tree after installation?


Step 2: Is the setting of "args" the absolute path of the Python program I want 
to debug? Whether it can exist anywhere on the computer, but after I entered 
the path, the font turned red. Obviously, something went wrong.


One last question: If I want to modify the function of an existing module, do I 
create a new OOT module and then copy the content of the original module to 
modify it?
Sincerely






------------------ ???????? ------------------
??????:                                                                         
                                               "Josh Morman"                    
                                                                
<[email protected]&gt;;
????????:&nbsp;2021??8??3??(??????) ????9:48
??????:&nbsp;"????????"<[email protected]&gt;;
????:&nbsp;"discuss-gnuradio"<[email protected]&gt;;
????:&nbsp;Re: How to debug GNU Radio's C++ program from source code?



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

&nbsp; &nbsp; &nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "name": "(gdb) Launch",
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "type": "cppdbg",
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "request": "launch",
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "program": "/usr/bin/python3",
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "args": ["/path/to/grc_output.py"],
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "stopAtEntry": false,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "cwd": "${workspaceFolder}",
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "environment": [],
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "externalConsole": false,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "MIMode": "gdb",
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "setupCommands": [
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
"description": "Enable pretty-printing for gdb",
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "text": 
"-enable-pretty-printing",
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
"ignoreFailures": true
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]
&nbsp; &nbsp; &nbsp; &nbsp; },

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 ???????? <[email protected]&gt; 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

Reply via email to