You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The symbols file must named in one of three ways. The same fname as the binary (game.elf), the same name plus the .debug extension (game.elf.debug) or the same name but the .debug extension instead of the original one (game.debug). To make sure the binary and symbols file have been produced in the same build, Orbit checks that they have a matching build id.
This is very limiting, especially when using OrbitService on one computer and Orbit on another. For some reasons Orbit finds the symbols provided by Ubuntu Linux on /usr/lib/debug if the client is running on the same computer the profiled program runs, but if I run the profiled program with OrbitService running on another computer and I share the /usr/lib/debug folder of the remote computer over the network to be mounted on the local computer running Orbit, and add that mount point to the list of folder to look debug symboles for, it doesn't work.
The file layout is the same as /usr/lib/debug, so here is how it is on the remote computer:
When the build id is 1ae0cb77020c59b410aa4719a7a23651221635b3 the filename is <symbol_folder>/.build-id/1a/e0cb77020c59b410aa4719a7a23651221635b3.debug, not <symbol_folder>/<exe_name>.debug, and there is probably no way to guess back the original executable name to please Orbit.
The second need is that such system's debug folder also provide debug symbol files with such file layout:
When the executable name is libglib2.0-0 the filename is <symbol_folder>/.dwz/<arch-triple>/libglib2.0-0.debug, not <symbol_folder>/<exe_name>.debug, this one may be easy to workaround.
The third need, is the need for the debuginfod layout, this is a service provided by some distros like Ubuntu, when running a program on GDB, GDB automatically download the symbols for the third-party loaded libraries from a debuginfod server, this is very convenient.
With /home/illwieckz/.cache being XDG_CACHE_HOME as defined by the XDG specification, more precisely ${XDG_CACHE_HOME:-${HOME}/.cache.
When the build-id is ffe88b55e233eb6eff03586e0818d55e769e79b2 the file name is <symbol_folder>/ffe88b55e233eb6eff03586e0818d55e769e79b2/debuginfo, , not <exe_name>.debug, and there is probably no way to guess back the original executable name to please Orbit.
So I suggest to add the support for <symbol_folder>/.build-id/<bu/ild_id>.debug, <symbol_folder>/.dwz/<arch-triple>/<exe_name>.debug and <symbol_folder>/<build_id>/debugino file names in Orbit debug symbol folders.
An extra option would be to also look for <symbol_folder>/<build_id>/debugino, this way a single /data/machine/debug folder exposing a remote computer filesystem would be able to provide both (according to the fact the remote filesystem would be configured to store everything in a single parent folder):
Note that for debuginfod model of usage, the profiler can spawn a call to debuginfod-find(1) (or make the equivalent http GET itself) to attempt to fetch debuginfo on the fly. It is not stuck looking only for previously received content.
Hi! The
DEVELOPMENT.md
file states:This is very limiting, especially when using
OrbitService
on one computer andOrbit
on another. For some reasons Orbit finds the symbols provided by Ubuntu Linux on/usr/lib/debug
if the client is running on the same computer the profiled program runs, but if I run the profiled program withOrbitService
running on another computer and I share the/usr/lib/debug
folder of the remote computer over the network to be mounted on the local computer running Orbit, and add that mount point to the list of folder to look debug symboles for, it doesn't work.The file layout is the same as
/usr/lib/debug
, so here is how it is on the remote computer:Here is how it is if
machine:/usr/lib/debug
is mounted as/data/machine/debug
:When the build id is
1ae0cb77020c59b410aa4719a7a23651221635b3
the filename is<symbol_folder>/.build-id/1a/e0cb77020c59b410aa4719a7a23651221635b3.debug
, not<symbol_folder>/<exe_name>.debug
, and there is probably no way to guess back the original executable name to please Orbit.The second need is that such system's debug folder also provide debug symbol files with such file layout:
So a mounted folder from a remote computer may be:
When the executable name is
libglib2.0-0
the filename is<symbol_folder>/.dwz/<arch-triple>/libglib2.0-0.debug
, not<symbol_folder>/<exe_name>.debug
, this one may be easy to workaround.The third need, is the need for the
debuginfod
layout, this is a service provided by some distros like Ubuntu, when running a program on GDB, GDB automatically download the symbols for the third-party loaded libraries from a debuginfod server, this is very convenient.Here is an example of the debuginfod file layout:
With
/home/illwieckz/.cache
beingXDG_CACHE_HOME
as defined by the XDG specification, more precisely${XDG_CACHE_HOME:-${HOME}/.cache
.When the build-id is
ffe88b55e233eb6eff03586e0818d55e769e79b2
the file name is<symbol_folder>/ffe88b55e233eb6eff03586e0818d55e769e79b2/debuginfo
, , not<exe_name>.debug
, and there is probably no way to guess back the original executable name to please Orbit.So I suggest to add the support for
<symbol_folder>/.build-id/<bu/ild_id>.debug
,<symbol_folder>/.dwz/<arch-triple>/<exe_name>.debug
and<symbol_folder>/<build_id>/debugino
file names in Orbit debug symbol folders.An extra option would be to also look for
<symbol_folder>/<build_id>/debugino
, this way a single/data/machine/debug
folder exposing a remote computer filesystem would be able to provide both (according to the fact the remote filesystem would be configured to store everything in a single parent folder):Thank you for this tool which is awesome and it would become much more awesome this way! 😍️
The text was updated successfully, but these errors were encountered: