繁体   English   中英

C ++:在Linux Shell脚本中运行gdb

[英]C++: running gdb in linux shell script

我有一个小的C ++程序my-program 当我直接运行my-program

./my-program arg1

一切都好。 我没有任何错误。 另外我有my-script.sh

#!/bin/sh
my-program $1

当我直接运行此脚本时:

./my-script.sh arg1

我没有任何错误。

从其他Linux进程运行my-script.sh时出现问题。 在这种情况下,我有时会收到Segmentation fault错误。 我所做的:我将-g开关添加到c ++编译器并编辑了my-script.sh ,因此它变为:

#!/bin/sh
gdb -batch -x gdb-script --args my-program $1

gdb-script我写道:

run

但是,我仍然找不到导致Segmentation fault错误的行。 错误后如何使dgb将stacktrace打印到某些文件? 也许有办法在程序中引起该错误的地方?

您可以检查系统中是否对核心转储设置了一些限制:

ulimit -c

如果它为“ 0”,则不会生成任何核心转储。 组:

ulimit -c unlimited

然后,只要出现“分段错误”,就运行该程序。 然后,您应该已生成核心转储文件。

从其他Linux进程运行my-script.sh时出现问题。

您的脚本包含几个错误:

  1. 仅当my-program所在的目录位于$PATH上时,它才有效。

  2. 它没有将参数正确传递给my-program 特别是,仅传递第一个参数,并且如果该参数包含空格,则将在调用my-program时将其拆分为多个单词并将成为多个参数。

要解决此问题,请执行以下操作:

#!/bin/sh
exec $(dirname "$0")/my-program "$@"

错误后如何使dgb将stacktrace打印到某些文件?

where命令附加到gdb-script

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM