1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

r8678: setup for gdb backtrace in 'make test'

(This used to be commit acf8c8fd49)
This commit is contained in:
Andrew Tridgell 2005-07-21 12:11:52 +00:00 committed by Gerald (Jerry) Carter
parent f8c1258d01
commit a369f0ecaf
7 changed files with 39 additions and 24 deletions

View File

@ -175,7 +175,7 @@ static int smb_print(struct smbcli_state *, char *, FILE *);
* Setup the SAMBA server state...
*/
setup_logging("smbspool", DEBUG_STDOUT);
setup_logging(argv[0], DEBUG_STDOUT);
if (!lp_load()) {
fprintf(stderr, "ERROR: Can't load %s - run testparm to debug it\n", lp_config_file());

View File

@ -48,6 +48,9 @@ static void popt_common_callback(poptContext con,
const char *arg, const void *data)
{
const char *pname;
/* setup for panics */
fault_setup(poptGetInvocationName(con));
if (reason == POPT_CALLBACK_REASON_POST) {
/* Hook any 'every Samba program must do this, after

View File

@ -23,14 +23,13 @@
#include "system/wait.h"
#include "system/filesys.h"
static void (*cont_fn)(void *);
/* the registered fault handler */
static struct {
const char *name;
void (*fault_handler)(int sig);
} fault_handlers;
static const char *progname;
#ifdef HAVE_BACKTRACE
#include <execinfo.h>
@ -111,8 +110,16 @@ void smb_panic(const char *why)
int result;
if (cmd && *cmd) {
DEBUG(0, ("smb_panic(): calling panic action [%s]\n", cmd));
result = system(cmd);
char pidstr[20];
char cmdstring[200];
safe_strcpy(cmdstring, cmd, sizeof(cmdstring));
snprintf(pidstr, sizeof(pidstr), "%u", getpid());
all_string_sub(cmdstring, "%PID%", pidstr, sizeof(cmdstring));
if (progname) {
all_string_sub(cmdstring, "%PROG%", progname, sizeof(cmdstring));
}
DEBUG(0, ("smb_panic(): calling panic action [%s]\n", cmdstring));
result = system(cmdstring);
if (result == -1)
DEBUG(0, ("smb_panic(): fork failed in panic action: %s\n",
@ -147,19 +154,6 @@ static void fault_report(int sig)
smb_panic("internal error");
if (cont_fn) {
cont_fn(NULL);
#ifdef SIGSEGV
CatchSignal(SIGSEGV,SIGNAL_CAST SIG_DFL);
#endif
#ifdef SIGBUS
CatchSignal(SIGBUS,SIGNAL_CAST SIG_DFL);
#endif
#ifdef SIGABRT
CatchSignal(SIGABRT,SIGNAL_CAST SIG_DFL);
#endif
return; /* this should cause a core dump */
}
exit(1);
}
@ -179,10 +173,11 @@ static void sig_fault(int sig)
/*******************************************************************
setup our fault handlers
********************************************************************/
void fault_setup(void (*fn)(void *))
void fault_setup(const char *pname)
{
cont_fn = fn;
if (progname == NULL) {
progname = pname;
}
#ifdef SIGSEGV
CatchSignal(SIGSEGV,SIGNAL_CAST sig_fault);
#endif

17
source4/script/gdb_backtrace Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
# we want everything on stderr, so the program is not disturbed
exec 1>&2
PID=$1
PROG=$2
TMPFILE=/tmp/gdb.$$
cat << EOF > $TMPFILE
set height 1000
bt full
quit
EOF
gdb -batch -x $TMPFILE $PROG $PID < /dev/null
/bin/rm -f $TMPFILE

View File

@ -92,6 +92,7 @@ cat >$CONFFILE<<EOF
name resolve order = bcast
interfaces = lo*
tls enabled = $TLS_ENABLED
panic action = $SRCDIR/script/gdb_backtrace %PID% %PROG%
[tmp]
path = $TMPDIR

View File

@ -45,6 +45,7 @@ void ejs_exception(const char *reason)
struct MprVar *return_var;
int exit_status, i;
fault_setup(argv[0]);
smbscript_init_subsystems;
mprSetCtx(mem_ctx);

View File

@ -96,8 +96,6 @@ static void cleanup_tmp_files(void)
*/
static void setup_signals(void)
{
fault_setup(NULL);
/* we are never interested in SIGPIPE */
BlockSignals(True,SIGPIPE);
@ -175,7 +173,7 @@ static int binary_smbd_main(int argc, const char *argv[])
poptFreeContext(pc);
setup_logging(NULL, interactive?DEBUG_STDOUT:DEBUG_FILE);
setup_logging(argv[0], interactive?DEBUG_STDOUT:DEBUG_FILE);
setup_signals();
/* we want total control over the permissions on created files,