【发布时间】:2017-02-14 07:19:49
【问题描述】:
我有一个小型 C++ 程序 my-program。当我直接运行my-program
./my-program arg1
一切正常。我没有收到任何错误。另外我还有my-script.sh:
#!/bin/sh
my-program $1
当我直接运行这个脚本时:
./my-script.sh arg1
我没有收到任何错误。
my-script.sh 从其他 linux 进程运行时出现问题。在这种情况下,我有时(!)得到Segmentation fault 错误。我做了什么:我将-g切换到c++编译器并编辑my-script.sh,所以它变成了:
#!/bin/sh
gdb -batch -x gdb-script --args my-program $1
在gdb-script我写道:
run
但是,我仍然找不到导致Segmentation fault 错误的行。错误后如何让 dgb 将堆栈跟踪打印到某个文件?或者也许有办法在程序中获取导致此错误的位置?
【问题讨论】:
-
将
bt(或backtrace或where)添加到您的“gdb-script”文件中? - 如果你有很多线程,你可能想要做更多的事情来打印所有线程的所有堆栈 - 我不确定那个命令是什么,但我知道它可以完成。 -
尝试在 valgrind 下运行。