TipsAndTricks/DebuggingBitbakeInPudb: Difference between revisions
(Created page with "=How to debug native recipes with gdb= I recently had the need to debug a crash in a native binary that a layer I was working on invokes during the build. To debug the crash...") |
No edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
=How to debug | =How to debug bitbake itself with pudb= | ||
I recently had the need to debug | I recently had the need to debug bitbake and toaster to figure out why toaster was no longer able to save event information to it's database. | ||
It turned out that I wanted to step through a number of the lib/bb/* files to see how the server was being setup. | |||
==What I did== | |||
<code> | |||
. ./poky/oe-init-build-env | |||
. toaster start webport=0.0.0.0:8000 | |||
</code> | |||
This set up the toaster webserver to run. | |||
Then my debug test: | |||
<code> | |||
python3 -m pudb.run $(which bitbake) quilt-native | |||
</code> | |||
I was looking at changes to bitbake/lib/bb/main.py. So, in that file I could set up breakpoints in code like so: | |||
<code> | |||
from pudb import set_trace as bp | |||
... | |||
... | |||
bp() | |||
... | |||
... | |||
</code> | |||
This allows me to sprinkle programmatic breakpoints wherever I want. | |||
If you have a better/preferred way to step through bitbake, feel free to add/change this document. | |||
= Debugging python in metadata with pudb = | |||
Now, this is kinda out there but you can do it. | |||
<br> | |||
My example is definitely a tad contrived but here goes. Suppose you want to see the state of things in the pudb debugger from a .inc file. As our example let's put the following at the top of quilt-native.inc, just after the line <code>EXTRA_OECONF = "--disable-nls"</code>: | |||
<code> | |||
python () { | |||
import sys | |||
from pudb import set_trace as bp | |||
i=5 | |||
for j in range(i): | |||
print("\nCOWZ IN QUILT_NATIVE.INC\n") | |||
bp() | |||
print("\n VERSION=",sys.version,"\n") | |||
} | |||
I | </code> | ||
If I then run | |||
<code> | |||
python3 -m pudb.run $(which bitbake) quilt-native | |||
</code> | |||
I will break in the python in the metadata and be able to stop through it and watch j=0,1,... up to 4. | |||
Looks like this: | |||
[[File:Screen_Shot_2017-02-03_at_3.04.04_PM.png|700px]] | |||
Latest revision as of 23:14, 3 February 2017
How to debug bitbake itself with pudb
I recently had the need to debug bitbake and toaster to figure out why toaster was no longer able to save event information to it's database.
It turned out that I wanted to step through a number of the lib/bb/* files to see how the server was being setup.
What I did
. ./poky/oe-init-build-env
. toaster start webport=0.0.0.0:8000
This set up the toaster webserver to run.
Then my debug test:
python3 -m pudb.run $(which bitbake) quilt-native
I was looking at changes to bitbake/lib/bb/main.py. So, in that file I could set up breakpoints in code like so:
from pudb import set_trace as bp
...
...
bp()
...
...
This allows me to sprinkle programmatic breakpoints wherever I want. If you have a better/preferred way to step through bitbake, feel free to add/change this document.
Debugging python in metadata with pudb
Now, this is kinda out there but you can do it.
My example is definitely a tad contrived but here goes. Suppose you want to see the state of things in the pudb debugger from a .inc file. As our example let's put the following at the top of quilt-native.inc, just after the line EXTRA_OECONF = "--disable-nls"
:
python () {
import sys
from pudb import set_trace as bp
i=5
for j in range(i):
print("\nCOWZ IN QUILT_NATIVE.INC\n")
bp()
print("\n VERSION=",sys.version,"\n")
}
If I then run
python3 -m pudb.run $(which bitbake) quilt-native
I will break in the python in the metadata and be able to stop through it and watch j=0,1,... up to 4. Looks like this: