我有一個用C語言編寫並在CentOS 5.5上運行的TCP Svr進程。它充當外部客戶端的TCP服務器,並使用它建立的Unix域套接字與系統中的其他進程進行IPC通信。這不是一個多線程的過程。它一次完成一項任務。有一個epoll_wait()用於偵聽TCP套接字或任何它使用內部進程建立的IPC套接字的請求。當epoll_wait()函數中斷時,我處理請求,然後返回到epoll_wait()如何使用DDD找到進程卡住的地方
我有一個TCP客戶端從外部(而不是IPC)連接到此進程。它連接成功,發送請求消息,得到迴應。我把它放在一個無限循環中 只是爲了測試它的健壯性等。
過了一會兒,TCP服務器停止響應來自TCP客戶端的請求。 TCP客戶端連接成功,發送請求消息,但它沒有從TCP服務器獲得任何響應消息。
所以我認爲TCP服務器卡在其他地方,試圖做一些事情,並沒有返回到epoll_wait()處理 其他請求進來。我試圖找出使用日誌,但那不是幫助我瞭解過程卡在哪裏。
所以我想使用任何調試器,可以給我一些信息(函數名稱會很好),至於過程在做什麼。把斷點,是壓倒性的,導致TCP服務器進程有大量的文件和功能....
我想在CentOS 5.5上使用DDD,想知道怎麼回事。我成功地關注了這個過程。然後我點擊「Step」或「Stepi」或「Next」按鈕.... 但沒有任何反應......
btw當我使用Eclipse進行調試並附加到這個進程(或任何進程) ,我總是會得到「__kernel_vsyscall()」....這是否意味着,無論它在做什麼,該程序默認在 中斷?如果是這樣的話,我怎麼才能從__kernel_vsyscall()調用中出來,在我的程序中繼續呢?如果我按f8,它會出來,但是我不知道它在哪裏,因爲我放棄了堆棧跟蹤......就像我之前說的那樣。因爲我不知道它在哪裏,我不知道在哪裏放置斷點....
總之,我想知道我的進程卡住了什麼地方,或者它在做什麼,並嘗試從那一點開始調試... 。
我該如何解決這個問題?
感謝 阿米特
感謝您的信息。我想到了......請看我的答案。 – FatherFigure 2011-02-21 05:17:37