我有一個非常複雜的shell腳本,它在其中調用我想通過GDB進行調試的C++程序。將這個C++程序與shell分離是非常困難的,因爲它有很多分支和大量的環境變量設置。使用GDB調試從shell腳本調用的C++程序
有沒有辦法在這個shell腳本上調用GDB?看起來像gdb
需要我直接調用一個C++程序。
我有一個非常複雜的shell腳本,它在其中調用我想通過GDB進行調試的C++程序。將這個C++程序與shell分離是非常困難的,因爲它有很多分支和大量的環境變量設置。使用GDB調試從shell腳本調用的C++程序
有沒有辦法在這個shell腳本上調用GDB?看起來像gdb
需要我直接調用一個C++程序。
有兩個選項,你可以做:
調用GDB直接在shell腳本。這意味着你沒有標準輸入和標準輸出重定向。
運行shell腳本,然後將調試器附加到已運行的C++進程中,如下所示:gdb progname 1234
其中1234
是正在運行的C++進程的進程ID。
如果您在程序開始運行之前需要做某些事情,那麼選項1將是更好的選擇,否則選項2是更乾淨的方式。
您能暫時將gdb
添加到腳本中嗎?
我可能會修改腳本來始終調用gdb(稍後恢復)或添加一個選項來調用gdb。這幾乎總是最簡單的解決方案。
接下來最簡單的方法就是臨時移動可執行文件,並將其替換爲在移動的程序上運行gdb的shell腳本。例如,在包含您的程序的目錄中:
$ mv program _program
$ (echo "#!/bin/sh"; echo "exec gdb $PWD/_program") > program
$ chmod +x program
修改C++應用程序以打印其pid並休眠30秒(可能基於環境或參數)。使用gdb附加到正在運行的實例。
除了通過@ diverscuba23提到的選項,你可以做到以下幾點:
gdb --args bash <script>
(假設它是一個bash腳本,否則相應的調整。)
媽......同樣的問題依然存在。我想我們需要做一個簡單的['set follow-fork-mode child'](https://stackoverflow.com/q/15126925/608639)來獲得我們感興趣的代碼... – jww