gpt4 book ai didi

c - gdb 不会在断点处停止

转载 作者:太空狗 更新时间:2023-10-29 17:07:14 32 4
gpt4 key购买 nike

我正在尝试调试在 check 下运行的共享库在单元测试场景中。共享库是静态链接的(没有dlload),单元测试应用程序和共享库都是用调试符号编译的(-g)

gdb 中,我想在共享库中包含的函数中设置断点。设置断点成功,但是运行的时候只是越过断点。

我已经尝试过的:

我在共享库里放了一个printf,打印出来了,所以才真正调用了这个函数。

这是我用于编译的 Makefile:

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)

最佳答案

我不知道您正在使用的 check 框架的细节,但一些此类框架在子进程中执行被测代码。如果 check 这样做,那么您的行为是预期的 - 您只是在调试父进程,但您的代码在子进程中执行。

您可以很容易地证实这个猜测:将代码中的 printf 替换为 abort。如果 GDB 没有在 SIGABRT 上停止,那么我的猜测可能是正确的,您将需要 (gdb) set follow-fork-mode child

或者,继续阅读 multi-inferior debugging.您可以使用 set detach-on-fork off ( documentation ) 要求 GDB 调试父项和子项。

关于c - gdb 不会在断点处停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17775037/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com