编写一个必定crash 的程序

#include <stdio.h>

void crash(){

    char *a=0;
*a=0;
}
int main()
{
printf("hello world\n");
crash();
printf("after crash\n");
}

运行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 ()

gdbserver 远程调试问题:设置文件和so搜索路径的更多相关文章

  1. GDB + gdbserver 远程调试android native code

    原文地址:GDB + gdbserver 远程调试android native code 作者:tq08g2z 以调试模拟器中的native library code为例. Host: ubuntuT ...

  2. 使用gdbserver远程调试

    使用gdbserver远程调试   1.默认crosstool交叉编译器没有自带gdbserver,需要自行编译 到GNU官方FTP下载,目前最新版的是gdb-6.7.1下载地址:http://ftp ...

  3. gdbserver远程调试嵌入式linux应用程序方法

    此处所讲的是基于gdb和gdbsever的远程调试方法.环境为:PC机:win7.虚拟机:10.04.下位机:飞嵌TE2440开发板. 嵌入式linux应用程序的开发一般都是在linux里面编写好代码 ...

  4. Makefile一 头文件及库搜索路径

    头文件及库搜索路径 头文件的搜索路径: 头文件的搜索规则是:找到就使用,停止继续往下寻找 1: #include “mytest.h” 搜索的顺序为: (1)先搜索当前目录 (2)然后搜索编译时 -I ...

  5. GDB + gdbserver 远程调试mediaserver进程

    远程调试步骤 在Android设备上启动gdbserver并attach你想调试的进程,并指定监听调试命令的端口(此端口是TV上的端口) $ adb shell # ps |grep media  # ...

  6. LaTeX自定义宏包、类文件的默认搜索路径设置方法

      对于自定义的LaTeX宏包与类,在调用时可以通过在命令\documentclass{}与\usepackage{}命令中指定完整路径或者相对路径,这样确实可以调用,但是编译时总是有烦人的警告信息, ...

  7. 如何在sublime3项目设置中设置python模块的搜索路径?ImportError: No module named *的解决办法

    问题:之前使用pycharm,用的挺溜,但是电脑配置实在不争气,pycharm启动久了,耗去大量内存,导致运行起来越来越慢,于是转向使用sublime text. 把项目从pycharm切换到subl ...

  8. Eclispe远程调试tomcat设置

    首先在catelina.sh中添加 JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=23787,server=y,su ...

  9. hive,spark的远程调试设置

    spark的远程调试 spark-env.sh文件里面,加上下面配置即可: if [ "$DEBUG_MODE" = "true" ]; then export ...

随机推荐

  1. JWT和Spring Security集成

    通常情况下,把API直接暴露出去是风险很大的, 我们一般需要对API划分出一定的权限级别,然后做一个用户的鉴权,依据鉴权结果给予用户对应的API (一)JWT是什么,为什么要使用它? 互联网服务离不开 ...

  2. jumpserver install

    本文来源jumpserver官网 一步一步安装 环境 系统: CentOS 7 IP: 192.168.244.144 关闭 selinux 和防火墙 # CentOS 7 $ setenforce ...

  3. 通过Hibernate实现添加功能

    package com.demo.dao; import org.hibernate.Session; import org.hibernate.SessionFactory; import org. ...

  4. UWP App Services in Windows 10

    1.AppServices in Universal Windows Platform(UWP) UWP 应用服务可以提供给另一个UWP应用.在Win10系统中,一个应用服务当作应用的一个方法和机制来 ...

  5. VTK读取序列化图像

    vtk获取内存中图像数据 原文链接:http://blog.csdn.net/zmy3376365/article/details/7717721 内存中有段图片数据  ,使用VTK来读入,然后就可以 ...

  6. layui 多选下拉框 控件 样式改变原因

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. python与php生成二维码对比

    php生成二维码 include 引入的库单独下载 <?php header("Content-type:text/html;charset=utf-8"); error_r ...

  8. Vue学习之路第十二篇:为页面元素设置内联样式

    1.有了上一篇的基础,接下来理解内联样式的设置会更简单一点,先看正常的css内联样式: <dvi id="app"> <p style="font-si ...

  9. python第二周:数据类型、列表、字典

    1.模块初识: sys模块: import sys print(sys.path) #path打印环境变量--> ['F:\\python学习\\projects\\s14\\day2', 'F ...

  10. 面试准备专题——JVM,类编译,类加载,内存错误

    jvm体系总体分四大块: 类的加载机制 jvm内存结构 GC算法 垃圾回收 GC分析 命令调优 类的加载机制 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法 ...