OVH Cloud OVH Cloud

Procédure appelante

4 réponses
Avatar
Patrick Fredin
Bonjour,

Une procédure est appelée par plusieurs autres procédures.
Est-il possible de savoir quelle est la procédure qui a appelé cette
procédure, autrement qu'en passant un paramètre ?

Merci pour votre aide.

--
Patrick

4 réponses

Avatar
Jean-Marc
"Patrick Fredin" a écrit dans le message
de news:
Bonjour,

Une procédure est appelée par plusieurs autres procédures.
Est-il possible de savoir quelle est la procédure qui a appelé cette
procédure, autrement qu'en passant un paramètre ?





Hello,

non ce n'est pas possible. Tu peux soit utiliser un paramètre, soit
généraliser, comme suit:

Tu places dans toutes tes procédure, à l'entrée et à la sortie (ou les
sorties)
du code du genre:
BEGIN_FUNCTION("ma_fonction")
...
END_FUNCTION("ma_fonction")

Le BEGIN empile dans une LIFO publique ('PUSH'), le END dépile ('POP').

A tout moment, tu peux regarder dans la LIFO pour savoir qui a appelé qui.

C'est ce que fait le débuggueur quand il t'affiche la pile d'appel.

Ca peut être très utile pour débugguer en cas de soucis, en dehors de
l'environnement
de développement.

C'est une technique classique d'investigation et de logging de code. Utile
aussi pour
faire du profilage (en modifiant légèrement).

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Patrick Fredin
Merci beaucoup pour ta réponse.

C'est quoi une LIFO ?

Merci.

--
Patrick


"Jean-Marc" wrote:

"Patrick Fredin" a écrit dans le message
de news:
> Bonjour,
>
> Une procédure est appelée par plusieurs autres procédures.
> Est-il possible de savoir quelle est la procédure qui a appelé cette
> procédure, autrement qu'en passant un paramètre ?



Hello,

non ce n'est pas possible. Tu peux soit utiliser un paramètre, soit
généraliser, comme suit:

Tu places dans toutes tes procédure, à l'entrée et à la sortie (ou les
sorties)
du code du genre:
BEGIN_FUNCTION("ma_fonction")
....
END_FUNCTION("ma_fonction")

Le BEGIN empile dans une LIFO publique ('PUSH'), le END dépile ('POP').

A tout moment, tu peux regarder dans la LIFO pour savoir qui a appelé qui.

C'est ce que fait le débuggueur quand il t'affiche la pile d'appel.

Ca peut être très utile pour débugguer en cas de soucis, en dehors de
l'environnement
de développement.

C'est une technique classique d'investigation et de logging de code. Utile
aussi pour
faire du profilage (en modifiant légèrement).

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;




Avatar
Loïc Carrère
Patrick Fredin a émis l'idée suivante :
Merci beaucoup pour ta réponse.

C'est quoi une LIFO ?

Merci.

--
Patrick


"Jean-Marc" wrote:

"Patrick Fredin" a écrit dans le message
de news:
Bonjour,

Une procédure est appelée par plusieurs autres procédures.
Est-il possible de savoir quelle est la procédure qui a appelé cette
procédure, autrement qu'en passant un paramètre ?





Hello,

non ce n'est pas possible. Tu peux soit utiliser un paramètre, soit
généraliser, comme suit:

Tu places dans toutes tes procédure, à l'entrée et à la sortie (ou les
sorties)
du code du genre:
BEGIN_FUNCTION("ma_fonction")
....
END_FUNCTION("ma_fonction")

Le BEGIN empile dans une LIFO publique ('PUSH'), le END dépile ('POP').

A tout moment, tu peux regarder dans la LIFO pour savoir qui a appelé qui.

C'est ce que fait le débuggueur quand il t'affiche la pile d'appel.

Ca peut être très utile pour débugguer en cas de soucis, en dehors de
l'environnement
de développement.

C'est une technique classique d'investigation et de logging de code. Utile
aussi pour
faire du profilage (en modifiant légèrement).

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;







Euh.. par LIFO je suppose que JM parle d'une pile qui est une structure
de données se basant sur le principe LIFO (last in first out).

La gestion d'une telle structure de données pourait effectivement te
permettre de retrouver tes points d'appel.
Avatar
jean-marc
"Loïc Carrère" wrote in message
news:
Patrick Fredin a émis l'idée suivante :
> Merci beaucoup pour ta réponse.
>
> C'est quoi une LIFO ?
>
> Merci.
>
> --
> Patrick
>
>
> "Jean-Marc" wrote:
>
>> "Patrick Fredin" a écrit dans le


message
>> de news:
>>> Bonjour,
>>>
>>> Une procédure est appelée par plusieurs autres procédures.
>>> Est-il possible de savoir quelle est la procédure qui a appelé cette
>>> procédure, autrement qu'en passant un paramètre ?
>>
>>
>>
>> Hello,
>>
>> non ce n'est pas possible. Tu peux soit utiliser un paramètre, soit
>> généraliser, comme suit:
>>
>> Tu places dans toutes tes procédure, à l'entrée et à la sortie (ou les
>> sorties)
>> du code du genre:
>> BEGIN_FUNCTION("ma_fonction")
>> ....
>> END_FUNCTION("ma_fonction")
>>
>> Le BEGIN empile dans une LIFO publique ('PUSH'), le END dépile ('POP').
>>
>> A tout moment, tu peux regarder dans la LIFO pour savoir qui a appelé


qui.
>>
>> C'est ce que fait le débuggueur quand il t'affiche la pile d'appel.
>>
>> Ca peut être très utile pour débugguer en cas de soucis, en dehors de
>> l'environnement
>> de développement.
>>
>> C'est une technique classique d'investigation et de logging de code.


Utile
>> aussi pour
>> faire du profilage (en modifiant légèrement).
>>
>> --
>> Jean-marc
>> "There are only 10 kind of people
>> those who understand binary and those who don't."
>> mailto: remove '_no_spam_' ;
>>
>>

Euh.. par LIFO je suppose que JM parle d'une pile qui est une structure
de données se basant sur le principe LIFO (last in first out).

La gestion d'une telle structure de données pourait effectivement te
permettre de retrouver tes points d'appel.




Hello,

oui c'est bien ça. Une Pile LIFO ("Last IN, First OUt") est une
structure de données qui permet d'empiler et de dépiler des données,
selno le principe "dernier entré, premier sorti":

LA PILE EST VIDE
Empile(A)
Empile(B)
Empile(C)

Depile() => On obtient C
Depile() => On obtient B
Depile() => On obtient A
Depile() => PILE VIDE

C'est une structure de données extrèmement utile.

Pour cette structuire LIFO, on parle en général de "PILE",
par opposiotn à une "FIFO" (First IN, First OUT), ou on
parle alors en généréle de "FILE".

Tu peux implémenter ta pile (LIFO) avec un tableau et un
index statique:
Quand tu empiles, tu incrémente l'index et tu mets la donnée.
Quand tu dépiles, tu renvoies la donnée qui se trouve à la position
de l'index, puis tu décérentes l'index.

Tout simple, efficace, et bien adapté à ce que tu veux faire pour
tracer tes appels.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;