我在 C++ 中有一些服务器(从构建系统获取的命令):
g++ -o obj/server.o -c -m64 -isystem/opt/boost/include -Wall -Werror -march=core2 -ftest-coverage -fprofile-arcs -DGCOV_ENABLED= -Iinclude -I/opt/hydraOST/lzopro/include -I/usr/include/libxml2 -Idaemon/include src/server.cpp
g++ -o bin/server.exe -rdynamic -ftest-coverage -fprofile-arcs -m64 -Wl,-rpath=\$ORIGIN -Wl,-rpath=/opt/hydraOST/lzopro/lib obj/server.o (+ other libs)
因为它是守护进程,我用信号停止它,但在kill $PID
我使用gdb之前强制转储 gcov 数据:
gdb -p $PID -batch -x gcov/dumpGcovData
其中gcov/dumpGcovData的内容:
call __gcov_flush()
thread apply all call __gcov_flush()
我知道链接应该是这样,-lgcov
但因为它是以这种方式工作的,所以我没有在构建系统中更改它。问题是在添加-rdynamic
标志之后发生的(没有该标志它可以正常工作)。