1. 第一种情况:应用层API(用户态)【coredump方法】

路由器: 在路由器/tmp运行命令,使其段错误的时候生成core文件;ulimit  -c  unlimited;

pc: 把 路由器的/tmp/core文件复制到 电脑的openwrt源码编译目录[/home/luo/op](虚拟机/远程服务器)

  开始gdb调试:

cd /home/luo/op;

./staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-1.0.x/bin/mipsel-openwrt-linux-uclibc-gdb build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/xxx/可执行文件     /home/luo/op/core

         set sysroot  /home/luo/op/staging_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/root-ralink/

bt

list

frame 1

2. 第二种情况:编译进内核,内核奔溃调试(内核态) [看符号表]

1.看路由器串口信息,在哪里奔溃

[   1.452000] Call Trace:
                [   1.452000] [<802735e8>]  flash_otp_init+0x8c/0x1e8
                [   1.452000] [<802735e8>]  xxxx
                [   1.452000] [<802735e8>]  xxxx

2.进入openwrt编译目录调试

cd build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/linux-ralink_mt7620/linux-3.14.79;

gdb  vmlinux;  使用X86/64的gdb,而不是mipsel的

list *(flash_otp_init+0x8c); 这个可以定位到哪一个.c文件的哪一行;

3. 第三种情况:编译为模块,内核奔溃调试(内核态)  [看符号表]

.ko模块调试;需要做一个准备动作;

make menuconfig

Global build settings  --->

Compile the kernel with profiling enabled; [CONFIG_KERNEL_PROFILING]

make V=s -j8要重新编译内核,烧写固件;

1.看路由器串口信息,在哪里奔溃

[   1.452000] Call Trace:
                [   1.452000] [<802735e8>]  xxx_trig_activate+0x2c/0x1e8
                [   1.452000] [<802735e8>]  xxxx
                [   1.452000] [<802735e8>]  xxxx

2.进入openwrt编译目录调试

cd  build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/linux-ralink_mt7620/

gdb ledtrig-xxx/ledtrig-xxx.ko;  使用X86/64的gdb,而不是mipsel的

list *(xxx_trig_activate+0x2c); 这个可以定位到哪一个.c文件的哪一行;

gdb build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/linux-ralink_mt7620/linux-3.14.79/vmlinux

list *(flash_otp_init+0x8c)

Openwrt之gdb调试相关推荐

  1. vs linux 交叉编译,VS结合VisualGDB搭建OpenWrt交叉编译远程调试开发环境

    由于此开发环境涉及3设备协同工作,因此先说明一下整体开发环境的配置以及每部分所负责的功能: 1.Windows PC 这里我用的是64位Win7,作为VS的安装环境Windows自然是必不可少的,本机 ...

  2. 使用 GDB 调试多进程程序

    使用 GDB 调试多进程程序 来源 https://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/index.html GDB 是 linux 系统上常 ...

  3. GDB调试--以汇编语言为例

    #rpm -qa |grep  gdb 下载: 安装 #tar -zxvf #./configure #make 使用GDB 以汇编语言调试为例 汇编语言实现CPUID指令 CPUID cpuid是I ...

  4. GDB 调试 Mysql 实战(二)GDB 调试打印

    背景 在 https://mengkang.net/1328.html 实验中,我们通过optimizer_trace发现group by会使用intermediate_tmp_table,而且里面的 ...

  5. 用gdb调试mpi程序的一些心得

    Linux下MPI (Message Passage Interface) 的程序不太好调试,在windows下vs2005以上的IDE有集成的简便MPI调试工具,没有用过,有兴趣的可以试验一下.下面 ...

  6. gdb php-fpm,使用 gdb 调试 php-fpm 异常错误

    相关资源下载GDB简介 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能. 问题 ...

  7. Linux基础 30分钟GDB调试快速突破

    引言 Linus心灵鸡汤 在*nix开发中有道卡叫gdb调试,不管你怎么搞. 它依然在那丝毫不会松动.今天致敬一个 活着的传奇 Linus Torvalds Unix 始于上个世纪60年代,在70年代 ...

  8. SLAM工具|GDB调试从入门到精通

    前言 对于windows平台下,VS下调试简单又方便,那么在linux系统下,该如何进行代码的调试呢? gdb是linux下非常好用的一个调试工具,虽然它是命令行模式的调试工具,但是它的功能非常强大, ...

  9. gdb调试 print打印不出变量值或者不准确

    编译选项加了 -O,即便是-O0,也不能正常显示,需要加上-gstabs+这个编译选项, -gdwarf-2这个编译选项会与-gstabs+冲突,去掉-gstabs+,只保留-gdwarf-2选项可以 ...

最新文章

  1. MFC获取文字高宽设置字符间隔
  2. pyecharts应用2 柱状图
  3. Kafka2.5->Flink1.12->Mysql8(Jark实验改为DDL形式)
  4. 【Python-随机旋转】图像随机旋转及坐标进行旋转原理
  5. Vagrant搭建可移动的PHP开发环境
  6. AUTOSAR从入门到精通100讲(十五)-AURIX TC3xx MCAL中Link文件解析以及代码变量定位方法详解
  7. 李廷伟:可穿戴技术引领物联网创新新浪潮
  8. 不是每个人的一生都会有贵人相助
  9. 手机游戏再造创业神话 80后月入过百万
  10. matlab画圆的命令_matlab画圆
  11. 无线通信行业常用名词
  12. python怎样计算增长率_增长率如何计算
  13. 微信开发者工具调试H5项目报错:XXXXfail, the permission value is offline verifying解决方案
  14. 旗下企业永远不会超过七家 马云
  15. js alert弹窗函数
  16. MicroCity的一点介绍-标号法、最小费用流
  17. Power BI与Tableau的对比与选择
  18. 直接调节风扇转速的Windows开源工具--Open Hardware Monitor
  19. 3.Hadoop3.x 项目测试
  20. Linux·centos 钉钉下载安装

热门文章

  1. Revit 2014 SDK中例子整理 (一)
  2. android textview 字体阴影,TextView加文字阴影
  3. 校园二手市场交易平台(JAVA,SSM,BOOTSTRAP,JSP,AJAX,MYSQL)
  4. 给开发人员的时间管理建议
  5. 腾讯视频QLV格式转换成mp4格式,只需这样做!
  6. 软考考试可以弃考吗?有什么影响?
  7. 几年级学生时候用计算机,小学要求一年级学生带电脑上课 称教学需要
  8. 2020年全球农药行业发展现状及竞争格局分析,受环保政策影响,全球农药市场规模增速趋缓「图」
  9. YOLOV1详解——Pytorch版
  10. 感应电动机和异步电动机的区别