[英]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时出现问题。
您的脚本包含几个错误:
仅当my-program
所在的目录位于$PATH
上时,它才有效。
它没有将参数正确传递给my-program
。 特别是,仅传递第一个参数,并且如果该参数包含空格,则将在调用my-program
时将其拆分为多个单词并将成为多个参数。
要解决此问题,请执行以下操作:
#!/bin/sh
exec $(dirname "$0")/my-program "$@"
错误后如何使dgb将stacktrace打印到某些文件?
将where
命令附加到gdb-script
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.