Re: How to track the call stack of gcc

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2025-03-14 at 11:38 +0000, Jonathan Wakely via Gcc-help wrote:
> On Fri, 14 Mar 2025 at 10:44, Gwen Fu via Gcc-help <gcc-help@xxxxxxxxxxx>
> wrote:
> > 
> > Dear gcc community:
> > I am trying to clear out  bug'119222'.It is a bug related to C++
> > floating-point operations where the divisor is o without warning (such as
> > "return 1/static_cast<double>0;").
> > 
> > Now I am managing to figure out which part of the project is about Warning
> > andFloating point operation.
> > I ran gdb and valgrind.It is feasible but a little complicated. Is there
> > any other method? If not, I will try to get used to it!
> 
> https://gcc.gnu.org/wiki/DebuggingGCC has some tips on effective
> debugging of the GCC executables.

The GCC compiler is containing Ian Lance Taylor's libbacktrace. 

a possibility is to use that library to print your call stack from inside your
C++ code inside GCC.

If you want an example, I am using libbacktrace and printing the call stack in
https://github.com/RefPerSys/RefPerSys (which is also GPL licensed but not
related to GCC, it is an inference engine project).

Inside GCC libbacktrace is used in gcc/diagnostic-format-sarif.cc and
gcc/simple-diagnostic-path.cc and the internal_error function

BTW, GCC is accepting plugins, and you might consider prototyping your
improvement first as a GCC plugin (for a recent released version of GCC, but not
necessarily its GCC trunk).

Given that GCC use gengtype for garbage collection I don't think it is useful to
use valgrind. See https://arxiv.org/abs/1109.0779

AFAIK GCC is (on purpose) leaking some small amount of memory. In other words,
valgrind will report some memory leaks. It does not matter in practice.

You could also look into the unmaintained https://github.com/bstarynk/bismon
which was about static analysis of GCC compiled code (using GCC plugins).


My recommendation is to focus on bug'119222' but not pay too much attention on
using valgrind. Of course GDB stays very useful. Adding your debug printing is
in practice very useful too.

In some cases, using a better than CPP preprocessor on your code (e.g. GPP from
https://logological.org/gpp) could be useful at least to debug (generate prints)
your GCC plugin.

Regards.


-- 
Basile STARYNKEVITCH           <basile@xxxxxxxxxxxxxxxxx>
8 rue de la Faïencerie
92340 Bourg-la-Reine,          France
http://starynkevitch.net/Basile & https://github.com/bstarynk 




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux