stack und Funktionsaufrufbaum zeichnen lassen



  • Hola,

    kennt ihr ein Programm, dass zu einem Code den entsprechenden Stackverlauf zeichnet sowie den Funktionsaufrufbaum?

    Greez

    Haimi



  • Also den Callstack zur aktuellen Stelle zeigt dir der Debugger des Visual Studio oder auch anderer IDEs an.


  • Mod

    Wie soll das gehen? Üblicherweise sieht der Programmverlauf jedes Mal anders aus, da man eine andere Eingabe bekommt. Zu jedem konkreten Programmverlauf zeigt dir, wie schon genannt, jeder beliebige Debugger die gewünschte Information an.

    edit: Hier ein schönes Gegenbeispiel, warum dies nicht im Vorhinein geht:

    #include<stdlib.h>
    #include<time.h>
    #include<stdio.h>
    
    void foo();
    
    void bar()
    {
      int a = rand() % 3;
      puts("Bar\n");
      switch(a)
        {
        case 0: foo(); break;
        case 1: bar(); break;
        default: break;
        }
    }
    
    void foo()
    {
      int a = rand() % 3;
      puts("Foo\n");
      switch(a)
        {
        case 0: foo(); break;
        case 1: bar(); break;
        default: break;
        }
    }
    
    int main()
    {
      srand(time(0));
      foo();
      return 0;
    }
    


  • doxygen kann statisch zumindest die möglöiche Funktions Aufruf Hierarchie zeichnen.

    Ansonsten kenne ich auch nur Debugger oder selbst programmiertn 'StackWalk'
    ab einer bestimmten position zur Laufzeit.

    Gruß Frank



  • Mit Conde Analysis im Visual Studio kannst du zumindest sehen wann und wie oft eine Funktion aufgerufen wurde, wie viele Ressourcen sie benötigte, etc.

    Ich weiß ja nicht, wofür du das genau brauchst.



  • Unter Solaris tut es die Funktion printstack(int fd) (man printstack). Dies gibt den aktuellen Call-Stack aus.

    Falls du Linux einsetzen solltest gibt es dazu eine Erklärung unter http://www.gnu.org/software/libc/manual/html_node/Backtraces.html man muss dort wohl das execinfo Headerfile einbinden.

    Ob es so etwas auch für Windows gibt weiß ich nicht.

    Gruß,
    Christian.


Anmelden zum Antworten