gdbserver 远程调试问题:设置文件和so搜索路径
编写一个必定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搜索路径的更多相关文章
- GDB + gdbserver 远程调试android native code
原文地址:GDB + gdbserver 远程调试android native code 作者:tq08g2z 以调试模拟器中的native library code为例. Host: ubuntuT ...
- 使用gdbserver远程调试
使用gdbserver远程调试 1.默认crosstool交叉编译器没有自带gdbserver,需要自行编译 到GNU官方FTP下载,目前最新版的是gdb-6.7.1下载地址:http://ftp ...
- gdbserver远程调试嵌入式linux应用程序方法
此处所讲的是基于gdb和gdbsever的远程调试方法.环境为:PC机:win7.虚拟机:10.04.下位机:飞嵌TE2440开发板. 嵌入式linux应用程序的开发一般都是在linux里面编写好代码 ...
- Makefile一 头文件及库搜索路径
头文件及库搜索路径 头文件的搜索路径: 头文件的搜索规则是:找到就使用,停止继续往下寻找 1: #include “mytest.h” 搜索的顺序为: (1)先搜索当前目录 (2)然后搜索编译时 -I ...
- GDB + gdbserver 远程调试mediaserver进程
远程调试步骤 在Android设备上启动gdbserver并attach你想调试的进程,并指定监听调试命令的端口(此端口是TV上的端口) $ adb shell # ps |grep media # ...
- LaTeX自定义宏包、类文件的默认搜索路径设置方法
对于自定义的LaTeX宏包与类,在调用时可以通过在命令\documentclass{}与\usepackage{}命令中指定完整路径或者相对路径,这样确实可以调用,但是编译时总是有烦人的警告信息, ...
- 如何在sublime3项目设置中设置python模块的搜索路径?ImportError: No module named *的解决办法
问题:之前使用pycharm,用的挺溜,但是电脑配置实在不争气,pycharm启动久了,耗去大量内存,导致运行起来越来越慢,于是转向使用sublime text. 把项目从pycharm切换到subl ...
- Eclispe远程调试tomcat设置
首先在catelina.sh中添加 JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=23787,server=y,su ...
- hive,spark的远程调试设置
spark的远程调试 spark-env.sh文件里面,加上下面配置即可: if [ "$DEBUG_MODE" = "true" ]; then export ...
随机推荐
- Koa 中实现 chunked 数据传输
有关于 Transfer-Encoding:chunked 类型的响应,参见之前的文章HTTP 响应的分块传输.这里看 Koa 中如何实现. Koa 中请求返回的处理 虽然官方文档有描述说明不建议直接 ...
- 3.ThinkPHP入门---视图
视图:MVC三大组成部分,负责信息的展示和输出 1.视图的创建 创建的位置需要是在分组目录下的view目录下余控制器同名的目录中. 2.视图的展示 在smarty和tinkphp都是使用diaplay ...
- angular实现的tab栏切换
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Ubuntu14.04引导菜单修复
原文链接:http://www.metsky.com/archives/636.html 独立分区下的Ubuntu引导菜单修复有点麻烦,执行挂载等命令时要小心检查,修复此类引导,首先需要确保当前系统和 ...
- 解决strip: Unable to recognise the format of the input file问题
前言 在编译xilinx的uboot的时候出现了一个问题,始终报错:“strip: Unable to recognise the format of the input file `gen_et ...
- .apply和.call用法和区别
apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性. Function.apply(obj,args)方法能接收两个参数obj:这个对象将代替Function类里this对象args:这 ...
- Nginx部署静态资源(及root与alias区别)
root目录与alias目录的区别Nginx路径location配置中,使用root目录与alias目录的区别 1)alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是 ...
- hibernate注解--@transient
@transient:表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性. 如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Bas ...
- google spanner
REF 论文 google spanner spanner 介绍 http://blog.jobbole.com/110262/
- N3-2 - 树 - binary-tree-level-order-traversal-ii
题目描述: Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, fro ...