6
votes

Définition du point d'arrêt sur la fonction de membre d'une classe dans un fichier

#include <stdio.h>
#include <iostream>

class X
{
    public:
        X   () 
        {
            std :: cout << "\nIn the default constructor";
        }

        X   (int) 
        {
            std :: cout << "\nIn the parameterized constructor";
        }

        ~X () {}
};

int main (int argc, char *argv[])
{
    X xObjA;
    X xObjB (11);

    while (--argc > 0)
    {
        printf("\n%s ", argv [argc]);
    }
    std :: cout << std :: endl << std :: endl;
}

0 commentaires

3 Réponses :


3
votes

C'est la bonne façon de définir un point d'arrêt.

Vous essayez soit d'essayer sur un mauvais exécutable (placez BreakSpoint.CPP dans un répertoire et compilez avec g ++ -g breakpoints.cpp, puis utilisez le GDB sur l'exécutable A.out), le code différent de l'affichage et peut-être que ayant des espaces de noms ou que vous avez trébuché sur un ancien bogue en raison d'une version de GDB obsolète.


4 commentaires

Recherche tout juste maintenant, je ne vois aucun problème de mon côté.


FWIW, j'ai essayé cela avec GDB 7.2 et GDB 7.3, seulement 7,3 travaillé.


@matt je pense que ma version de gdb est 7.1 :) anisha @ linux-dopx: ~> gdb -v gdb GDB (GDB) SUSE (7.1-3.12) sur SUSE 11.3


Je peux confirmer la déclaration de Matt. Travaille en 7.3 mais pas en 7.2. Il en va de même pour RPEB (E.G. RBeC x :: )



0
votes

Vous devrez peut-être spécifier l'espace de noms s'il est défini pour la classe. Si cela est autre que l'espace de noms standard STD. Le nom du fichier est facultatif, si vous exécutez le bon binaire. Vous pouvez vérifier si le symbole existe sur l'exécutable via. Commande "NM -C", laquelle -C gère Nom Mangling pour C ++.

Donc de résumer avec un exemple: Si l'espace de noms est "myspace" et la classe est "X" dont le membre est "Y", Ensuite, le point d'arrêt devrait être comme celui ci-dessous, "(gdb) b myspace :: x :: y"


0 commentaires

1
votes

Vous devez peut-être définir vos points d'arrêt sans em> le nom du fichier. Les œuvres suivantes pour moi:

Breakpoint 1 at 0x7fe62f8e744d: file src/FooClass.cpp, line 42. (2 locations)
(gdb) info break
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   <MULTIPLE>
1.1                         y   0x00007fe62f8e744d in FooNamespace::FooClass::doSomething() at src/FooClass.cpp:42
1.2                         y   0x00007fe62f8e7c5d in FooNamespace::FooClass::doSomething() at src/FooClass.cpp:42


0 commentaires