使用gdb调试getopt函数时出现问题

使用gdb调试getopt函数时出现问题,gdb,getopt,Gdb,Getopt,我正在使用以下脚本从源代码构建DNStrater应用程序: #!/bin/bash ######### # FILES # ######### PACKAGE_NAME=dnstracer-1.6 PACKAGE_TAR_FILE=${PACKAGE_NAME}.tar.gz PACKAGE_FTP_SITE=http://ftp.iij.ad.jp/pub/linux/momonga/1/PKGS/SOURCES/ ##################################

我正在使用以下脚本从源代码构建DNStrater应用程序

#!/bin/bash
#########
# FILES #
#########
PACKAGE_NAME=dnstracer-1.6
PACKAGE_TAR_FILE=${PACKAGE_NAME}.tar.gz    
PACKAGE_FTP_SITE=http://ftp.iij.ad.jp/pub/linux/momonga/1/PKGS/SOURCES/

####################################
# REMOVE OLD STUFF JUST TO BE SURE #
####################################
rm -rf build
rm -rf ${PACKAGE_NAME}
rm -rf ${PACKAGE_TAR_FILE}

#####################################
# Get source code for buggy package #
#####################################
wget ${PACKAGE_FTP_SITE}/${PACKAGE_TAR_FILE}

######################
# Unpack it here ... #
######################
tar xf ${PACKAGE_TAR_FILE}

##########################################
# Prepare an out of tree build directory #
##########################################
mkdir build

##############################
# Get inside build directory #
##############################
cd build

#################
# Configure ... #
#################
../${PACKAGE_NAME}/configure

###############
# Make it !!! #
###############
make -j
我看到它带有自己的getopt,这对我很好,因为我需要调试它:

$ ls -l ./dnstracer-1.6/getopt.*
./dnstracer-1.6/getopt.c
./dnstracer-1.6/getopt.h
然而,当我尝试从gdb进入getopt时,我意识到它可能有一些其他getopt(可能没有调试符号?),它不允许我进入:

$ cd build
$ gdb --args ./dnstracer -v aaaaaa
$ (gdb) break main
$ (gdb) run
$ (gdb) next
$ 1304 while ((ch=getopt(argc,argv,"coq:r:s:t:v"))!=-1) {
$ step
$ 1305 switch (ch) {
如何配置构建过程以使用附带的getopt版本而不是某些隐藏的默认版本?谢谢

我看到它有自己的getopt,这对我很好,因为我 需要调试它:

$ ls -l ./dnstracer-1.6/getopt.*
./dnstracer-1.6/getopt.c
./dnstracer-1.6/getopt.h
由于您使用的是Ubuntu,因此情况并非如此,请参见附带的getopt.h:

// Only used in the win32-version of dnstracer.
// Supplied by Mike Black <mblack@csihq.com>
//仅在win32版本的dnstracer中使用。
//由迈克·布莱克提供
因此,您使用的是系统
getopt
,它是glibc的一部分。要进入
getopt
,需要安装glibc调试符号。请参阅如何在Ubuntu上调试glibc

我看到它有自己的getopt,这对我很好,因为我 需要调试它:

$ ls -l ./dnstracer-1.6/getopt.*
./dnstracer-1.6/getopt.c
./dnstracer-1.6/getopt.h
由于您使用的是Ubuntu,因此情况并非如此,请参见附带的getopt.h:

// Only used in the win32-version of dnstracer.
// Supplied by Mike Black <mblack@csihq.com>
//仅在win32版本的dnstracer中使用。
//由迈克·布莱克提供

因此,您使用的是系统
getopt
,它是glibc的一部分。要进入
getopt
,需要安装glibc调试符号。请参阅如何在Ubuntu上调试glibc。

您的操作系统是什么?你在Windows上吗?你从哪里得到的数据源?Ubuntu17.10。。。ftp站点的整个构建脚本都在问题中,您的操作系统是什么?你在Windows上吗?你从哪里得到的数据源?Ubuntu17.10。。。ftp站点的整个构建脚本都在问题中谢谢,我实际上需要更改getopt,但只想为dnstracer临时更改。我试图欺骗配置,使其认为我是在windows上的:WIN32=1../${PACKAGE_NAME}/configure。。。但还是不行。。。它使用glibc getopt…谢谢,我实际上需要更改getopt,但只想为dnstracer临时更改它。我试图欺骗配置,使其认为我是在windows上的:WIN32=1../${PACKAGE_NAME}/configure。。。但还是不行。。。它使用glibc getopt。。。