Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2007-02

Exception callstacks, backtracks...

6 messages · 5 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

m utku

Hi all,

Basically I want to get a stack trace and log it when a special exception occurs. All I could find about was the lineinfo.pas (and -gl switch) but that does not help much as it interfaces only one procedure which is no good for client usage. What do I miss; what common things do you use for your own exception logging&handling?

Actually the ultimate solution would be having something like the infamous Madexcept or EurokaLog Delphi addins. Are there any similar attemps I overlooked?

It seems I will be using more and more FPC on my job and I am addicted to such tools which makes me mad when I need to debug for some crash just to get a callstack :) So, before I start rolling a solution, what are your advices and where should my efforts go so that the community would also benefit?

Best regards. M. Utku Karatas
Vincent Snijders
to m utku
m utku wrote 18 lines
Hi all, Basically I want to get a stack trace and log it when a special exception occurs. All I could find about was the lineinfo.pas (and -gl switch) but that does not help much as it interfaces only one procedure which is no good for client usage. What do I miss; what common things do you use for your own exception logging&handling? Actually the ultimate solution would be having something like the infamous Madexcept or EurokaLog Delphi addins. Are there any similar attemps I overlooked? It seems I will be using more and more FPC on my job and I am addicted to such tools which makes me mad when I need to debug for some crash just to get a callstack :) So, before I start rolling a solution, what are your advices and where should my efforts go so that the community would also benefit?

I don't know those tools, may Multilog does something similar: http://wiki.lazarus.freepascal.org/MultiLog

Vincent

Luiz Americo Pereira Camara
to Vincent Snijders: I don't know those tools, may Multilog does something similar:…
Vincent Snijders wrote 22 lines
m utku schreef: > Hi all, > > Basically I want to get a stack trace and log it when a special > exception occurs. All I could find about was the lineinfo.pas (and > -gl switch) but that does not help much as it interfaces only one > procedure which is no good for client usage. What do I miss; what > common things do you use for your own exception logging&handling? > > Actually the ultimate solution would be having something like the > infamous Madexcept or EurokaLog Delphi addins. Are there any similar > attemps I overlooked? > > It seems I will be using more and more FPC on my job and I am > addicted to such tools which makes me mad when I need to debug for > some crash just to get a callstack :) So, before I start rolling a > solution, what are your advices and where should my efforts go so > that the community would also benefit? > I don't know those tools, may Multilog does something similar: http://wiki.lazarus.freepascal.org/MultiLog

Yes. It has a specialized SendCallStack function.

BTW: I will update it shortly

Luiz

m utku
Jonas Maebe wrote 8 lines
There's Procedure Dump_Stack(var f : text;bp:pointer); in the system unit. You can use it like this: dump_stack(stdout,get_frame);

This cleared a lot on my mind, thanks Jonas...

Recently I have tried this:
//------------------------------------------------------
try
    AFunctionThatWillRaiseAnExceptionDeepInside;
except
    Dump_Stack(stdout, ExceptAddr);
end;
//------------------------------------------------------

Unfortunately this did not do what I thought: giving the callstack from the point of where exception occured. Is there any way for that?

Thanks,
M. Utku Karatas

Luiz Americo
to m utku
m utku wrote 25 lines
Jonas Maebe writes: > There's > > Procedure Dump_Stack(var f : text;bp:pointer); > > in the system unit. You can use it like this: > > dump_stack(stdout,get_frame); > This cleared a lot on my mind, thanks Jonas... Recently I have tried this: //------------------------------------------------------ try AFunctionThatWillRaiseAnExceptionDeepInside; except Dump_Stack(stdout, ExceptAddr); end; //------------------------------------------------------ Unfortunately this did not do what I thought: giving the callstack from the point of where exception occured. Is there any way for that?

Multilog also provides a SendException method that will give the exception stack frame along other info

Luiz