簡體   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