*** empty log message ***

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@1218 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Dave Beazley 2001-06-24 20:01:03 +00:00
commit 0db13bddea
6 changed files with 111 additions and 17 deletions

View file

@ -1,3 +1,9 @@
WAD 0.2 - June 24, 2001
- Minor changes. Added the wadtrace file
- Put everything under the LGPL.
WAD 0.1 - March 23, 2001 WAD 0.1 - March 23, 2001
- Extensive changes to WAD core. WAD now builds an exception - Extensive changes to WAD core. WAD now builds an exception

View file

@ -202,6 +202,8 @@ extern void wad_stack_debug(WadFrame *f);
extern char *wad_strip_dir(char *); extern char *wad_strip_dir(char *);
extern void wad_default_callback(int signo, WadFrame *frame, char *ret); extern void wad_default_callback(int signo, WadFrame *frame, char *ret);
extern void wad_dump_trace(int fd, int signo, WadFrame *frame, char *ret);
extern void wad_set_callback(void (*h)(int, WadFrame *, char *)); extern void wad_set_callback(void (*h)(int, WadFrame *, char *));
extern char *wad_load_source(char *, int line); extern char *wad_load_source(char *, int line);
extern void wad_release_source(); extern void wad_release_source();

View file

@ -329,7 +329,8 @@ The scripts debug.py, debug.tcl, debug.pl can be used to test these extensions.
No official documentation exists at this time. However, the Papers No official documentation exists at this time. However, the Papers
directory contains two conference papers that describe WAD's design directory contains two conference papers that describe WAD's design
and high-level operation. Slides from the Python9 talk are also included. and high-level operation. Slides from the Python9 talk are also
included.
9. To-Do 9. To-Do
@ -369,4 +370,4 @@ ways to contribute. Here is the short to-do list:
Please contact me if you are interested in working on any of these projects. Please contact me if you are interested in working on any of these projects.
Dave Beazley (beazley@cs.uchicago.edu) Dave Beazley (beazley@cs.uchicago.edu)
March 23, 2001 June 24, 2001

65
Tools/WAD/Test/death.tcl Normal file
View file

@ -0,0 +1,65 @@
load ./debug.so
proc death_by_segmentation { } {
seg_crash
}
proc death_by_bus { } {
bus_crash
}
proc death_by_abort { } {
abort_crash -1
}
proc death_by_math { } {
math_crash 37 0
}
proc death_by_buffer { } {
overflow_crash
}
set method 1
proc death {} {
global method
if { $method == 1 } {
death_by_segmentation
}
if { $method == 2 } {
death_by_abort
}
if { $method == 3 } {
death_by_math
}
if { $method == 4 } {
death_by_bus
}
if { $method == 5 } {
death_by_buffer
}
}
label .l -text "How would you like to die today?"
pack .l
radiobutton .r1 -text "Segmentation fault" -variable method -value 1
pack .r1 -anchor w
radiobutton .r2 -text "Failed assertion" -variable method -value 2
pack .r2 -anchor w
radiobutton .r3 -text "Math error" -variable method -value 3
pack .r3 -anchor w
radiobutton .r4 -text "Bus error" -variable method -value 4
pack .r4 -anchor w
radiobutton .r5 -text "Stack overflow" -variable method -value 5
pack .r5 -anchor w
button .b -text "Die" -command death
pack .b -fill both -expand 1
wm title . "Death Wizard"

View file

@ -255,31 +255,30 @@ wad_debug_make_strings(WadFrame *f) {
} }
} }
/* ----------------------------------------------------------------------------- /* Dump trace to a file */
* Default callback void wad_dump_trace(int fd, int signo, WadFrame *f, char *ret) {
* ----------------------------------------------------------------------------- */ static char buffer[128];
void wad_default_callback(int signo, WadFrame *f, char *ret) {
char *srcstr = 0; char *srcstr = 0;
switch(signo) { switch(signo) {
case SIGSEGV: case SIGSEGV:
fprintf(stderr,"WAD: Segmentation fault.\n"); write(fd,"WAD: Segmentation fault.\n", 25);
break; break;
case SIGBUS: case SIGBUS:
fprintf(stderr,"WAD: Bus error.\n"); write(fd,"WAD: Bus error.\n",17);
break; break;
case SIGABRT: case SIGABRT:
fprintf(stderr,"WAD: Abort.\n"); write(fd,"WAD: Abort.\n",12);
break; break;
case SIGFPE: case SIGFPE:
fprintf(stderr,"WAD: Floating point exception.\n"); write(fd,"WAD: Floating point exception.\n", 31);
break; break;
case SIGILL: case SIGILL:
fprintf(stderr,"WAD: Illegal instruction.\n"); write(fd,"WAD: Illegal instruction.\n", 26);
break; break;
default: default:
fprintf(stderr,"WAD: Signal %d\n", signo); sprintf(buffer,"WAD: Signal %d\n", signo);
write(fd,buffer,strlen(buffer));
break; break;
} }
/* Find the last exception frame */ /* Find the last exception frame */
@ -289,16 +288,24 @@ void wad_default_callback(int signo, WadFrame *f, char *ret) {
} }
while (f) { while (f) {
fputs(f->debug_str, stderr); write(fd,f->debug_str,strlen(f->debug_str));
if (f->debug_srcstr) { if (f->debug_srcstr) {
srcstr = f->debug_srcstr; srcstr = f->debug_srcstr;
} }
f = f->prev; f = f->prev;
} }
if (srcstr) { if (srcstr) {
fputs("\n", stderr); write(fd,"\n",1);
fputs(srcstr,stderr); write(fd,srcstr,strlen(srcstr));
fputs("\n", stderr); write(fd,"\n",1);
} }
} }
/* -----------------------------------------------------------------------------
* Default callback
* ----------------------------------------------------------------------------- */
void wad_default_callback(int signo, WadFrame *f, char *ret) {
wad_dump_trace(2,signo,f,ret);
}

View file

@ -401,6 +401,19 @@ void wad_signalhandler(int sig, siginfo_t *si, void *vcontext) {
wad_string_debug(); wad_string_debug();
wad_memory_debug(); wad_memory_debug();
/* Before we do anything with callbacks, we are going
to attempt to dump a wad-core */
{
int fd;
static int already = 0;
fd = open("wadtrace",O_WRONLY | O_CREAT | (already*O_APPEND) | ((already==0)*O_TRUNC),0666);
if (fd > 0) {
wad_dump_trace(fd,sig,origframe,retname);
close(fd);
already=1;
}
}
if (sig_callback) { if (sig_callback) {
(*sig_callback)(sig,origframe,retname); (*sig_callback)(sig,origframe,retname);