gdb调试高级用法

如何在调试内核时,同时可以调试应用程序的做法:

(cskygdb) c
Continuing.
^C
Program received signal SIGINT, Interrupt.
default_idle () at arch/csky/kernel/process.c:83
83		__asm__ __volatile__(
(cskygdb) hb *0x00065e34           ==》对应应用反汇编处的地址
Hardware assisted breakpoint 1 at 0x65e34
(cskygdb) c
Continuing.

Program received signal SIGTRAP, Trace/breakpoint trap.
0x00065e36 in ?? ()
(cskygdb) disa
disable      disassemble
(cskygdb) disa
disable      disassemble
(cskygdb) disassemble
No function contains program counter for selected frame.
(cskygdb) disassemble $pc,$pc+30    ==》确认地址是否跟反汇编处的地址一样
Dump of assembler code from 0x65e36 to 0x65e54:
=> 0x00065e36:	st	r15, (r0, 24)
   0x00065e38:	st	r8, (r0, 28)
   0x00065e3a:	mov	r8, r0
   0x00065e3c:	st	r2, (r8, 8)
   0x00065e3e:	st	r3, (r8, 12)
   0x00065e40:	st	r4, (r8, 16)
   0x00065e42:	bmaski	r7, 0
   0x00065e44:	st	r7, (r8, 0)
   0x00065e46:	ld	r7, (r8, 12)
   0x00065e48:	bmaski	r6, 8
   0x00065e4a:	andn	r7, r7, r6
   0x00065e4c:	cmpnei	r7, 0
   0x00065e4e:	bt	0x65e5c
   0x00065e50:	ld	r2, (r8, 8)
   0x00065e52:	ld	r3, (r8, 12)
End of assembler dump.
(cskygdb) add-symbol-file /home/yingc/nfs/dvb/out.elf 0x00080e0  ==》0x00080e0是text段的地址
add symbol table from file "/home/yingc/nfs/dvb/out.elf" at
	.text_addr = 0x80e0
(y or n) y
Reading symbols from /home/yingc/nfs/dvb/out.elf...done.
(cskygdb) si
\0x00065e38	23	{
(cskygdb) l
18
19	#include "module/app_ioctl.h"
20	//#include "module/app_ca_manager.h"
21
22	status_t app_ioctl(uint32_t id, uint32_t cmd, void * params)
23	{
24	    status_t ret = GXCORE_ERROR;
25	    switch (cmd & (~0xff))
26	    {
27	        case APP_FRONTEND_BASE:
(cskygdb) n

\[email protected]:~/work/goxceed-dvbs-hd/test/solution/output$ csky-elf-readelf -S out.elf There are 28 section headers, starting at offset 0xa84da0:

Section Headers:  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al  [ 0]                   NULL            00000000 000000 000000 00      0   0  0  [ 1] .init             PROGBITS        000080b4 0000b4 000022 00  AX  0   0  4  [ 2] .text             PROGBITS        000080e0 0000e0 2f779a 00  AX  0   0 16  [ 3] .fini             PROGBITS        002ff87c 2f787c 000016 00  AX  0   0  4  [ 4] .rodata           PROGBITS        002ff8a0 2f78a0 071b60 00   A  0   0 16  [ 5] .eh_frame         PROGBITS        00371400 369400 0013a8 00   A  0   0  4  [ 6] .tdata            PROGBITS        003737a8 36a7a8 000004 00 WAT  0   0  4  [ 7] .tbss             NOBITS          003737ac 36a7ac 000008 00 WAT  0   0  4  [ 8] .ctors            PROGBITS        003737ac 36a7ac 000008 00  WA  0   0  4  [ 9] .dtors            PROGBITS        003737b4 36a7b4 000008 00  WA  0   0  4  [10] .jcr              PROGBITS        003737bc 36a7bc 000004 00  WA  0   0  4  [11] .got              PROGBITS        003737c0 36a7c0 0000c4 04  WA  0   0  4  [12] .data             PROGBITS        00373888 36a888 04a8f8 00  WA  0   0  8  [13] .bss              NOBITS          003be180 3b5180 05a4cc 00  WA  0   0  8  [14] .comment          PROGBITS        00000000 3b5180 000082 01  MS  0   0  1  [15] .debug_aranges    PROGBITS        00000000 3b5202 008558 00      0   0  1  [16] .debug_pubnames   PROGBITS        00000000 3bd75a 01cd87 00      0   0  1  [17] .debug_info       PROGBITS        00000000 3da4e1 3b54ec 00      0   0  1  [18] .debug_abbrev     PROGBITS        00000000 78f9cd 03ddac 00      0   0  1  [19] .debug_line       PROGBITS        00000000 7cd779 19ac68 00      0   0  1  [20] .debug_frame      PROGBITS        00000000 9683e4 043dc0 00      0   0  4  [21] .debug_str        PROGBITS        00000000 9ac1a4 06262a 01  MS  0   0  1  [22] .debug_loc        PROGBITS        00000000 a0e7ce 00e472 00      0   0  1  [23] .debug_pubtypes   PROGBITS        00000000 a1cc40 061f78 00      0   0  1  [24] .debug_ranges     PROGBITS        00000000 a7ebb8 0060e8 00      0   0  1  [25] .shstrtab         STRTAB          00000000 a84ca0 0000fe 00      0   0  1  [26] .symtab           SYMTAB          00000000 a85200 034710 10     27 7115  4  [27] .strtab           STRTAB          00000000 ab9910 03845b 00      0   0  1Key to Flags:  W (write), A (alloc), X (execute), M (merge), S (strings)  I (info), L (link order), G (group), x (unknown)  O (extra OS processing required) o (OS specific), p (processor specific)

259129 00065e34 <app_ioctl>:259130 259131 #include "module/app_ioctl.h"259132 //#include "module/app_ca_manager.h"259133 259134 status_t app_ioctl(uint32_t id, uint32_t cmd, void * params)259135 {259136    65e34:?  25f0      ? subi?   r0, r0, 32259137    65e36:?  9f60      ? st? r15, (r0, 24)259138    65e38:?  9870      ? st? r8, (r0, 28)259139    65e3a:?  1208      ? mov?r8, r0259140    65e3c:?  9228      ? st? r2, (r8, 8)259141    65e3e:?  9338      ? st? r3, (r8, 12)259142    65e40:?  9448      ? st? r4, (r8, 16)259143     status_t ret = GXCORE_ERROR;259144    65e42:?  2c07      ? bmaski? r7, 0259145    65e44:?  9708      ? st? r7, (r8, 0)259146     switch (cmd & (~0xff))259147    65e46:?  8738      ? ld? r7, (r8, 12)259148    65e48:?  2c86      ? bmaski? r6, 8259149    65e4a:?  1f67      ? andn?   r7, r7, r6259150    65e4c:?  2a07      ? cmpnei? r7, 0259151    65e4e:?  e006      ? bt? 0x65e5c259152     {259153         case APP_FRONTEND_BASE:259154             ret = nim_ioctl(id, cmd, params);

注意:hb 的个数有限制,即使disable的话,也可能会不响应下一个

aa

时间: 2024-10-04 00:24:39

gdb调试高级用法的相关文章

Linux gdb调试器用法全面解析

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式. 当程序被停住时,可以检查此时程序中所发生的事,并追索上文. 动态地改变程序的执行环境. 不管是调试Linux内核空间的驱动还是调试用户空间的应用程序,掌握gdb的用法都是必须.而且,调试内核和调试应用程序时使用的gdb命令是完全相同的,下面以代码清单22.2的应用程

工具篇之GDB调试器用法

GDB 完成的作用: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序 让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式 当程序被停住时,可以检查此时程序中所发生的事,并追索上文 动态改变程序的运行环境 常见问题: 如何打印变量的值?(print var) 如何打印变量的地址?(print &var) 如何打印地址的数据值?(print *address) 如何查看当前运行的文件和行?(backtrace) 如何查看指定文件的代码?(list file:N) 如何立即执行完当前

gdb调试汇总

1. 启动GDB开始调试: (1)gdb program ///最常用的用gdb启动程序,开始调试的方式(2)gdb program core ///用gdb查看core dump文件,跟踪程序core的原因(3)gdb program pid ///用gdb调试已经开始运行的程序,指定pid即可 2. 应用程序带命令行参数的情况,可以通过下面两种方法启动: (1)启动GDB的时候,加上–args选项,然后把应用程序和其命令行参数带在后面,具体格式为:gdb –args program args

Fiddler 高级用法:Fiddler Script 与 HTTP 断点调试

之前在<关于 WEB/HTTP 调试利器 Fiddler 的一些技巧分享>中系统的介绍过 Fiddler 的原理与一些常见技巧,但那篇文章只是入门科普,并不深入,今天要介绍到的内容相对更加高级与深入,扩展性更好,功能更加强大. 1.Fiddler Script 1.1 Fiddler Script简介 在web前端开发的过程中,fiddler是最常使用的一款调试工具.在大多数情况下,通过fiddler默认菜单的功能就可以基本满足开发者的调试需求,然而如果需要满足更复杂的调试场景时,单纯通过fi

gdb调试命令

本篇摘自互联网,纯属自己学习笔记,然分享给看到我的博客的人们. 用GDB调试程序 GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能. 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能.而Windows下的图形软件基本上是各自为营,

比较全面的gdb调试命令

用GDB调试程序 GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能. 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能.而Windows下的图形软件基本上是各自为营,互相不能调用,很不利于各种软件的相互集成.在这里并不是要和Win

C++ gdb调试

cmake和gdb调试程序 由于出发点是想要在cmake后使用gdb,因此先写一下cmake和gdb的简单的一个流程,此部分转自:WELEN 1.  cmake支持gdb的实现,首先在CMakeLists.txt下加入SET(CMAKE_BUILD_TYPE "Debug") 在下面加入:SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")SET(CMAKE_CXX_FLAGS_RELEASE

Python爬虫的Urllib库有哪些高级用法?

本文和大家分享的主要是python爬虫的Urllib库的高级用法相关内容,一起来看看吧,希望对大家学习python有所帮助. 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它 是一段HTML代码,加 JS.CSS,如果把网页比作一个人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是它的衣服.所以最重要的部分是存在于HTML中的,下面我 们就写个例子来扒一个网页下来. imp

【转】linux下gdb调试

本文写给主要工作在Windows操作系统下而又需要开发一些跨平台软件的程序员朋友,以及程序爱好者. GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本程序调试工作. 命令 解释 示例 file <文件名> 加载被调试的可执行程序文件. 因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径. (gdb) file gdb-sample r Run的简写,运行被调试的程序. 如果此前没有下过断点,则执行完整个程序:如果有断点,则程序暂停在第一个可用断点