我的項目基本上是一個像lync一樣的通信客戶端,它是用JAVA爲前端(GUI)開發的,並使用特定於平臺的本地(C或C++)代碼來運行服務。爲什麼使用JAR應用程序的GDB調試本機代碼在命中斷點時會掛起Ubuntu UI(X11進程)?
現在,在Linux上(Ubuntu 12.04),一旦JAR應用程序被調用,它將加載所有本地代碼共享庫並開始執行UI線程。在UI中完成的任何操作都會將事件引發到C中的本地代碼。因此,當前我需要在C/C++用戶庫中調試崩潰,當我在UI下拉菜單中執行某些操作時會觸發該事件。
我正在使用GDB連接到進程的PID(sudo gdb -p),所有的符號都被加載了,我可以在庫中設置一個函數斷點A()。之後在GDB中繼續執行命令,我從UI下拉列表中選擇實例,並在函數A()處命中斷點。在這一刻,我的Ubuntu機器掛起,沒有鍵盤中斷正在工作。我只能移動我的鼠標指針,但不能點擊任何東西。
但是,要驗證內核是否關閉,我可以ping機器,甚至可以使用SSH。一旦SSH調用相同的GDB,就不會遇到上述問題。任何人都可以請在這裏幫我解釋爲什麼UI或X11過程在上述場景中掛起。
PS:是的,有很多線程在運行,它可能是一個線程死鎖的情況,但是當SSH終端調用GDB時它不會發生。
感謝和問候, 因陀羅
這有幫助嗎? [在X11上調試彈出菜單和類似組件時掛起](https://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-Desktop/html/awt.html#gdadua) – 2014-11-09 15:34:08