gpt4 book ai didi

c++ - 如何将 linux 恶魔/服务的堆栈跟踪保存到外部文件中

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:23 27 4
gpt4 key购买 nike

我在打印为 C++ 应用程序创建的恶魔的堆栈跟踪(回溯)时遇到问题。服务基于基于/etc/init.d/init 脚本的体系结构,我已经看到一些服务遵循相同的方式在 Linux 中将应用程序作为服务交付。在这种情况下,当通过 service name stop 停止我的服务时,程序的堆栈跟踪打印在控制台上。此回溯包含程序未清理的内存映射。我只需要避免在终端上打印它并将它保存到一个单独的文件中,直到我修复程序的内存问题。

已编辑:

  • 这可以通过向初始化脚本添加更多命令来实现吗?
  • 是否有任何编译选项可以避免打印程序停止程序后的堆栈跟踪?
  • 可以使用一段 c/c++ 源代码来处理这个问题吗?

下面是我的/etc/init.d/init脚本。

# Source function library.
. /etc/rc.d/init.d/functions

cscored=${CSCORED-/opt/application-name/bin/cscore &}
prog=cscored
pidfile=${PIDFILE-/var/run/cscored/cscored.pid}
lockfile=${LOCKFILE-/var/lock/subsys/cscored}
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10}

start() {
echo -n $"Starting $prog: "
daemon $cscored
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}

stop() {
echo -n $"Stopping $prog: "
killproc $cscored
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
echo -n $"Reloading $prog: "
if ! $cscored -t >&/dev/null; then
RETVAL=6
echo $"not reloading due to configuration syntax error"
failure $"not reloading $cscored due to configuration syntax error"
else
# Force LSB behaviour from killproc
LSB=1 killproc -p ${pidfile} $cscored -HUP
RETVAL=$?
if [ $RETVAL -eq 7 ]; then
failure $"cscored shutdown"
fi
fi
echo
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $cscored
RETVAL=$?
;;
restart)
stop
start
;;
condrestart|try-restart)
if status $cscored >&/dev/null; then
stop
start
fi
;;
force-reload|reload)
reload
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"
RETVAL=2
esac

exit $RETVAL

最佳答案

您可以使用管道或 dup() 将控制台的输出重定向到另一个文件。

关于c++ - 如何将 linux 恶魔/服务的堆栈跟踪保存到外部文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28576169/

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