2013-07-21 16 views
5

Ich versuche, eine gemeinsam genutzte Bibliothek zu debuggen, die unter check im Unit-Test-Szenario ausgeführt wird. Die gemeinsam genutzte Bibliothek ist statisch gelinkte (kein dlload) und sowohl die Einheit-Testanwendung und der gemeinsam genutzten Bibliothek mit Bugsymbol kompiliert (-g)Gdb stoppt nicht an Haltepunkt

In gdb I in der gemeinsam genutzten Bibliothek einen Unterbrechungspunkt in einer Funktion enthalten setzen möchten . Ich setze einen Haltepunkt erfolgreich, aber wenn er ausgeführt wird, passiert er einfach den Haltepunkt.

Was ich schon versucht habe:

ich eine printf in der gemeinsam genutzten Bibliothek platziert wird ausgedruckt, so dass die Funktion aufgerufen wird, tatsächlich.

Hier ist das Makefile ich für die Kompilierung bin mit:

SHELL = /bin/sh 
CC = gcc 
CFLAGS  = -g -Wall -std=gnu99 -Iinclude 
EXTRA_FLAGS = -fPIC -shared 
LIBFLAGS  = -fPIC -shared 
LDFLAGS  = -shared -pthread -lcheck 
DEBUGFLAGS = -O0 -D _DEBUG 
RELEASEFLAGS = -O2 -D NDEBUG -combine -fwhole-program 
TEST_LDFLAGS = -lcheck -lllist -Llib -Wl,-rpath $(OBJDIR) 

OBJDIR = lib 
TARGET = $(OBJDIR)/libllist.so 
TEST_TARGET = starttest 
SOURCES = $(shell echo src/*.c) 
HEADERS = $(shell echo inc/*.h) 
TEST_SOURCES = $(shell echo tests/*.c) 
TEST_OBJECTS = $(TEST_SOURCES:.c=.o) 
OBJECTS = $(SOURCES:.c=.o) 
PREFIX = $(DESTDIR)/usr/local 
BINDIR = $(PREFIX)/bin 

all: $(TARGET) tests 
$(TARGET): $(OBJECTS) 
    mkdir -p $(OBJDIR) 
    $(CC) $(FLAGS) $(LIBFLAGS) $(DEBUGFLAGS) -o $(TARGET) $(OBJECTS) 


tests: $(TEST_OBJECTS) 
    $(CC) $(FLAGS) -o $(TEST_TARGET) $(TEST_OBJECTS) $(TEST_LDFLAGS) 

# Need a special rule to compile the lib to allow EXTRA_FLAGS 
$(OBJECTS): $(SOURCES) 
    @echo [Compiling]: $< 
    $(CC) $(CFLAGS) $(EXTRA_FLAGS) -o $@ -c $< 

clean: 
    rm -rf $(TEST_OBJECTS) $(OBJECTS) *~ $(TARGET) $(TEST_TARGET) 

runtests: 
    ./$(TEST_TARGET) 

Antwort

12

Ich weiß nicht, Besonderheiten des check Rahmen Sie verwenden, aber einige solcher Frameworks Ausführen von Code-under-Test bei einem Kind verarbeiten. Wenn check das tut, wird Ihr Verhalten erwartet - Sie debuggen nur den übergeordneten Prozess, aber Ihr Code wird in einem unterordneten Code ausgeführt.

Sie können diese Schätzung leicht bestätigen: Ersetzen Sie die printf in Ihrem Code durch abort. Wenn GDB nicht auf SIGABRT stoppt, dann ist meine Schätzung wahrscheinlich richtig, und Sie werden (gdb) set follow-fork-mode child möchten.

Alternativ lesen Sie bitte multi-inferior debugging. Sie können GDB bitten, sowohl das übergeordnete als auch das untergeordnete Element mit set detach-on-fork off (documentation) zu debuggen.

+0

Sie haben recht, ich habe das Problem gelöst, indem ich eine Debug-Option verwendet habe, um das Forking im Check-Framework abzuschalten. Vielen Dank. - http://check.sourceforge.net/doc/check_html/check_4.html#No-Fork-Mode – stdcall

Verwandte Themen