2011-02-04 60 views
1

我開始了一個已經運行了幾個小時的Centos進程。我使用gcc -g來構建共享庫和可執行文件。我通過輸入gdb ./MatchUpAccurate開始了gdb過程。一旦gdb啓動,我輸入run -input XXXXXXX -fileloc YYYYY -version 5如何使用命令行參數附加到進程?

當我輸入ps -ef時,我看到兩個進程標識號,一個用於gdb ./MatchUpAccurate.exe,另一個用於./MatchUpAccurate.exe -input XXXXXXX -fileloc YYYYY -version 5

由於子進程已經被現在正在運行了幾個小時,我想重視它,所以我可以檢查它的變量的值,並看到它正在運行的指令。

我看了一些文檔的如何使用gdb來附加一個已經運行的進程。但是,所有示例都沒有命令行參數。我想知道如何使用gdb通過命令行參數附加一個進程。我將能夠設置斷點,檢查變量,查看調用堆棧,並在不殺死原始進程的情況下遍歷執行路徑。謝謝。

+0

這是更好: - ) – TonyK 2011-02-04 16:59:59

回答

3

您需要連接到PID:

gdb binary_name pid

另外,啓動gdb並附加

[email protected] ~> gdb binary_name 
(gdb) attach 1234 
+0

我試過了,但是當我進入r繼續,gdb迴應「程序沒有運行」。當我輸入bt時,gdb以「無堆棧」進行響應。當我輸入信息參數時,gdb以「未選擇幀」進行響應。當我輸入run時,gdb會詢問命令行參數。當我運行-input xxx -fileloc yyyy -version 5時,gdb開始在程序開始時運行。謝謝。 – 2011-02-04 16:36:25

+0

@Frank:你是否在待調試的進程的相同用戶/特權下運行gdb? – jweyrich 2011-02-04 17:16:35

2

如果用gdb開始你的EXE你不必重視它。只需點擊Ctrl-C並查看您的變量。

如果你想連接,開始你的EXE:

./myexe --myopt myargs 

得到PID:

myexe_pid=$! 

然後附上:

gdb ./myexe $myexe_pid 

MY2C