2009-03-25 11 views
8

Sarebbe possibile vedere CallStack in VBA per MS Access 2003? Vale a dire, sarebbe possibile vedere da quale procedure o function è stato chiamato un altro function?Come ispezionare lo stack delle chiamate

+0

Questo è il tipo di compito per cui ASM è utile. – pyon

risposta

3

Non esiste un modo programmatico in VBA per visualizzare lo stack di chiamate che conosco. La solita soluzione a questo problema è usare una struttura per tenere traccia delle chiamate di funzioni, ma mi sembra sempre un kludge, e veramente utile solo quando si programma (non in runtime), nel qual caso mi sembra che il VBE sia capacità integrata per vedere lo stack di chiamate è sufficiente.

E, BTW, ho sempre messo il pulsante di chiamata stack sulla mia barra degli strumenti VBE, dal momento che è una delle funzioni più frequentemente utilizzate per me. Aggiungo anche il pulsante di compilazione - Penso che sia pazzesco che non sia sulla barra degli strumenti di default perché incoraggia le persone a codificare senza mai forzare una compilazione. Inoltre, Access 2000 non utilizzava nemmeno Option Explicit per impostazione predefinita (presumibilmente per coerenza con le altre app che utilizzano VBE - in altre parole, accesso stupido per renderlo coerente con app che non sono quasi come codice- pesante).

Ma sto divagando ...

9

In runtime, menu Visualizza -> Chiama pila (o premere CTRL + L).

2

Alla fine, aggiungere un parametro opzionale per la vostra funzione, e passare il nome del chiamante in quel modo. Per i moduli, è possibile utilizzare Me.Name come parametro.

0

Sì, è possibile, MA non è abbastanza utile!

Private Declare Sub SetMode Lib "vba332.dll" Alias "EbSetMode" (ByVal lngMode As Long) 
Private Declare Function GetCallStackCount Lib "vba332.dll" Alias "EbGetCallstackCount" (lngCount As Long) As Long 
Private Declare Function GetCallStackFunction Lib "vba332.dll" Alias "EbGetCallstackFunction" (ByVal Lvl As Long, ByRef strBase As String, ByRef strModule As String, ByRef strFunction As String, ByRef Done As Long) As Long 

Prima dell'uso GetCallStackCount e GetCallStackFunction chiamata setmode (2), e dopo setmode (1).