[英]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.