1. 程式人生 > >gdb attach

gdb attach

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