我有一個小型的C++程序my-program
。當我直接運行my-program
時C++:在linux shell腳本中運行gdb
./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將堆棧跟蹤打印到某個文件?或者也許有辦法讓程序中導致這個錯誤的地方?
將'bt'(或'backtrace'或'where')添加到您的「gdb-script」文件中? - 如果你有很多線程,你可能想要做更多的事情來打印所有線程的所有堆棧 - 我不確定那個命令是什麼,但我知道它可以完成。 –
嘗試在valgrind下運行。 –