前段時間在跟蹤源碼時候,發現用gdb attach 進程不行,有時候還是提示找不到源碼。那時項目趕,所以沒有去理清楚。現在有時間將gdb的調試重新自己弄個小demo看看,先上代碼先。
#include <iostream> #include <time.h> #include <unistd.h> #include <stdio.h> int main() { int k =0; // pid_t pid; // pid = fork(); // if(pid > 0) // { // std::cout << "Farther Hello, World!" << std::endl; // return 1; // } else { // std::cout << "child Hello, World!" << std::endl; // } while(k < 100000) { k++; std::cout << "Hello, World!"<<k << std::endl; sleep(1); } std::cout << "Hello, World!"<<k << std::endl; return 0; }
以單進程的形式開始,你會得到一個pid,這是用ps -aux| grep 進程名,得到pid。
如這里我的進程是11891, 然后gdb 進入gdb模式。注意這個要用權限,因為后面有attach。
然后就是file原來的debug程序(已經加入-g參數編譯),然后attach 進程11891,最后寫上你的斷點后繼續c就可以看到斷點。
這里說一下,可以用gdbserver來遠程調試,以這里為例就是sudo gdbserver :10089 --attach 11891。這里默認是127.0.0.1.