【问题标题】:problems debugging getopt function with gdb使用 gdb 调试 getopt 函数的问题
【发布时间】:2018-03-05 20:25:28
【问题描述】:

我正在使用此脚本构建 dnstracer 应用程序从源代码

#!/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 版本而不是某些隐藏的默认值?谢谢!

【问题讨论】:

  • 你的操作系统是什么?你在 Windows 上吗?你从哪里得到 dnstracer 的资源?
  • Ubuntu 17.10 ...带有ftp站点的整个构建脚本都在问题内

标签: gdb getopt


【解决方案1】:

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

由于您使用的是 Ubuntu,因此您不是这种情况,请参阅随附的 getopt.h:

// Only used in the win32-version of dnstracer.
// Supplied by Mike Black <mblack@csihq.com>

因此,您使用的是系统 getopt,它是 glibc 的一部分。为了进入getopt,您需要安装 glibc 调试符号。请参阅https://stackoverflow.com/a/48287761/72178 了解如何在 Ubuntu 上调试 glibc。

【讨论】:

  • 谢谢,我实际上需要更改 getopt,但只想为 dnstracer 临时更改。我试过欺骗配置以为我在 Windows 上:WIN32=1 ../${PACKAGE_NAME}/configure ...但仍然不行...它使用 glibc getopt ...
猜你喜欢
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2017-10-10
  • 2010-12-09
相关资源
最近更新 更多