• gdbserver 远程调试问题:设置文件和so搜索路径


    编写一个必定crash 的程序

    #include <stdio.h>
    
    void crash(){
     
        char *a=0;
        *a=0;
    }
    int main()
     {
            printf("hello world
    ");
            crash();
            printf("after crash
    ");
     }
    运行gdb 远程调试

    gdbserver :1234 a.out 


    执行 gdb , 执行命令  target remote :1234

    必须用 file 指定可运行文件,才干看见调用函数

    (gdb) c
    Continuing.
    
    Program received signal SIGSEGV, Segmentation fault.
    0x0000000000400534 in ?? ()
    (gdb) bt
    #0  0x0000000000400534 in ??

    () #1 0x00007fffffffe4c0 in ?? () #2 0x000000000040054c in ?

    ? () #3 0x0000000000000000 in ??

    () (gdb) file /home/payne/hello/a.out A program is being debugged already. Are you sure you want to change the file? (y or n) y Reading symbols from /home/payne/hello/a.out...done. (gdb) bt #0 0x0000000000400534 in fun1 () at hello.cpp:6 #1 0x000000000040054c in main () at hello.cpp:12

    不用 -g 编译也能看见函数,但不能定位到行

    Program received signal SIGSEGV, Segmentation fault.
    0x0000000000400534 in crash() ()
    (gdb) bt
    #0  0x0000000000400534 in crash() ()
    #1  0x000000000040054c in main ()

    把 crash 放到 so 中会怎样?

    生成libcrash.so 又一次编译 hello.cpp

    g++ -o libcrash.so -shared crash.cpp 

    export LD_LIBRARY_PATH=`pwd`

    g++  hello.cpp  -lcrash


    gdb 不能定位到 so 中的函数

    rogram received signal SIGSEGV, Segmentation fault.
    0x00007ffff7ff65bc in ?

    ?

    () (gdb) bt #0 0x00007ffff7ff65bc in ?? () #1 0x00007fffffffe470 in ?? () #2 0x0000000000400657 in ?? () #3 0x0000000000000000 in ?? () (gdb) file /home/payne/hello/a.out A program is being debugged already. Are you sure you want to change the file? (y or n) Please answer y or n. A program is being debugged already. Are you sure you want to change the file? (y or n) y Reading symbols from /home/payne/hello/a.out...(no debugging symbols found)...done. (gdb) bty Undefined command: "bty". Try "help". (gdb) bt #0 0x00007ffff7ff65bc in ??

    () #1 0x00007fffffffe470 in ?? () #2 0x0000000000400657 in main ()


    用 set solib-search-path 指定路径, 能够得到 so 中的位置

    (gdb) set solib-search-path /home/payne/hello
    Reading symbols from /home/payne/hello/libcrash.so...(no debugging symbols found)...done.
    Loaded symbols for /home/payne/hello/libcrash.so
    Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...Reading symbols from /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.15.so...done.
    done.
    Loaded symbols for /lib/x86_64-linux-gnu/libc.so.6
    Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug/lib/x86_64-linux-gnu/ld-2.15.so...done.
    done.
    Loaded symbols for /lib64/ld-linux-x86-64.so.2
    (gdb) bt
    #0  0x00007ffff7ff65bc in crash() () from /home/payne/hello/libcrash.so
    #1  0x0000000000400657 in main ()



  • 相关阅读:
    javascript获取xml节点的最大值
    iis 不能浏览aspx页面
    批量替换文件夹里面的文本文件的指定字符
    select update delete
    SQL IAM的理解
    数据库的页构成
    sqltype IsDBNull
    MSSQL优化教程之1.4 其他几种类型的页面
    SqlDataAdapter
    行状态,行版本
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7119710.html
Copyright © 2020-2023  润新知