Hi All, Just came back from holliday and working on something else than GNUstep. Although today I intend to finish this stack trace utility.
Thanks to Win Oudshoorn who provided me with some good groundwork and API research I was able to come out with a nice and clean solution which easily give me the stack trace in my code. (see the 2 attached [.hm] files, and there is a demo project in the .tgz, with the original file from Wind Oudshoorn as well).
However this doesn't give me the function information for code in Gnustep. I have to manually load GNUstep's DLL with [GSStackTrace loadModule: @"C:\\GNUstep\\System\\Tools\\gnustep-base.dll"];I would like to load this information automatically by using whatever path information GNUstep has. In fact I know there is some function to locate, say, gnustep-base.dll I just can't remember it.....
So: How do I get the path to theGNUstep's DLL? (gnustep-base.dll & gnustep-gui.dll)
Additionaly:I would hack my version of GNUstep so that Zombie method call and exception raise dump this information.
I think that would be a nice feature to add to GNUstep to.
#import <Foundation/Foundation.h>
#include <bfd.h>
@interface GSFunctionInfo : NSObject
{
void* _address;
NSString *_fileName;
NSString *_functionName;
int _lineNo;
}
- initWithAddress:(void*)address
file:(NSString*)file
function:(NSString*)function
line:(int)lineNo;
- (void*) address;
- (int) lineNumber;
- (NSString *) fileName;
- (NSString *) function;
@end
@interface GSBinaryFileInfo : NSObject
{
NSString * _filename;
bfd *_abfd;
asymbol **_symbols;
long _symbolCount;
}
// return info for an executable (.EXE or .DLL)
// but not for any of its dependency (i.e. required DLL)
- initWithBinaryFile: (NSString *)filename;
- init; // return info for the current executing process
- (NSString *) filename;
- (GSFunctionInfo *) functionForAddress: (void*) address;
@end
@interface GSStackTrace : NSObject
{
NSMutableArray *frames;
}
// initialize stack trace info
+ (void) loadModule:(NSString *)filename;
// query the stack
+ (GSStackTrace*) currentStack;
- (unsigned) frameCount;
- (GSFunctionInfo*) frameAt:(unsigned) index;
- (NSString*) description;
- (NSEnumerator*) enumerator;
- (NSEnumerator*) reverseEnumerator;
@end
StackTrace.m
Description: Binary data
stack.tgz
Description: Binary data
_______________________________________________ Discuss-gnustep mailing list [email protected] http://lists.gnu.org/mailman/listinfo/discuss-gnustep
