gdb attach
阿新 • • 發佈:2017-10-17
else cnblogs return style .cn serve world! fork 繼續
前段時間在跟蹤源碼時候,發現用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.
gdb attach