常用Linux系统Debug命令
- 格式:docx
- 大小:13.19 KB
- 文档页数:4
Linux调试⼯具1. 使⽤printf调试#ifdef DEBUGPrintf(“valriable x has value = %d\n”, x)#endif然后在编译选项中加⼊-DDEBUG更复杂的调试应⽤如:#define BASIC_DEBUG 1#define EXTRA_DEBUG 2#define SUPER_DEBUG 4#if (DEBUG &EXTRA_DEBUG)printf …#endif在这种情况下如果设置编译器标志为-DDEBUG=5,将启⽤BASIC_DEBUG和SUPER_DEBUG。
标志-DDEBUG=0将禁⽤所有的调试信息,也可以在程序中添加如下语句:#ifndef DEBUG#define DEBUG 0#endif2.使⽤gdb调试Gcc编译的时候要加上-g选项,让编译器在程序中添加额外的调试信息。
如果正式发布,这些调试信息可以使⽤strip命令删除。
Gdb:Backtrace栈跟踪3. 程序静态分析⼯具splintsplint功能:常识性测试并产⽣⼀些警告信息。
它可以检测未经赋值的变量使⽤,函数的参数未使⽤等异常情况。
4. 程序执⾏性能分析⼯具prof/gprof显⽰执⾏所花费的时间具体都⽤在什么操作上。
5. 内存调试ElectricFence函数库和valgrind可以⽤来检查动态内存分配的⼀些问题,包括内存泄漏。
Linux下的调试⼯具随着XP的流⾏,⼈们越来越注重软件的前期设计、后期的实现,以及贯穿于其中的测试⼯作,经过这个过程出来的⾃然是⾼质量的软件。
甚⾄有⼈声称XP会淘汰调试器!这当然是有⼀定道理的,然⽽就⽬前的现实来看,这还是⼀种理想。
在⽇常⼯作中,调试⼯具还是必不可少的。
在Linux下,调试⼯具并⾮只有gdb,还有很多其它调试⼯具,它们都各有所长,侧重⽅⾯也有所不同。
本⽂介绍⼏种笔者常⽤的调试⼯具:1. mtrace在linux下开发应⽤程序,⽤C/C++语⾔的居多。
Debug启动 Debug,它是可用于测试和调试 MS-DOS 可执行文件的程序。
Debug [[drive:][path] filename [parameters]]参数[drive:][path] filename指定要测试的可执行文件的位置和名称。
parameters指定要测试的可执行文件所需要的任何命令行信息。
++说明使用 Debug 命令但不指定要测试的文件如果使用没有位置和文件名的 Debug 命令,然后键入所有的 Debug 命令以响应 Debug 提示符,连字符 (-)。
Debug 命令以下是 Debug 命令列表:? 显示 Debug 命令列表。
a 汇编 8086/8087/8088 记忆码。
c 比较内存的两个部分。
d 显示部分内存的内容。
e 从指定地址开始,将数据输入到内存。
f 使用指定值填充一段内存。
g 运行在内存中的可执行文件。
h 执行十六进制运算。
i 显示来自特定端口的 1 字节值。
l 将文件或磁盘扇区内容加载到内存。
m 复制内存块中的内容/n 为 l 或 w 命令指定文件,或者指定正在测试的文件的参数。
o 向输出端口发送 1 个字节的值。
p 执行循环、重复的字符串指令、软件中断或子例程。
q 停止 Debug 会话。
r 显示或改变一个或多个寄存器。
s 在部分内存中搜索一个或多个字节值的模式。
t 执行一条指令,然后显示所有寄存器的内容、所有标志的状态和 Debug 下一步要执行的指令的解码形式。
u 反汇编字节并显示相应的原语句。
w 将被测试文件写入磁盘。
xa 分配扩展内存。
xd 释放扩展内存。
xm 映射扩展内存页。
xs 显示扩展内存的状态。
分隔命令参数所有 Debug 命令都接受参数,除了 q 命令之外。
可以用逗号或空格分隔参数,但是只有在两个十六进制值之间才需要这些分隔符。
因此,以下命令等价:dcs:100 110d cs:100 110d,cs:100,110指定有效地址项Debug 命令中的 address 参数指定内存位置。
Linuxdmidecode命令当我们需要获取机器硬件信息时,可使⽤linux系统⾃带的dmidecode⼯具进⾏查询。
dmidecode ⽤于获取服务器的硬件信息,通常是在不打开计算机机箱的情况下使⽤该命令来查找硬件详细信息这个命令可以查看内存的⼏乎所有信息,包括频率⼤⼩等等,另外这个命令强⼤到⼏乎可以查任何硬件信息包括设备型号、bios 、cpu、主板、处理器、内存、缓存详细信息等等都例举出来,对于⼤部分普通服务器⽤户来说,我们选择VPS、服务器产品的时候⽐较关⼼的是产品的费⽤、服务器的速度以及稳定性,更有就是服务商家的服务(尤其不能跑路)。
随着我们使⽤服务器时间的推移,以及会看到各个不同的商家产品的时候,就会需要有所对⽐,严谨的⽤户会更为的关注产品的硬件配置信息。
因为在主机⾏业中,配置的差距关乎到产品的成本和费⽤,⾄少我们要弄明⽩不能被⼈忽悠。
[root@localhost ~]$ yum install -y dmidecode常见⽤法如下:[root@localhost ~]$ dmidecode # 打印所有硬件信息[root@localhost ~]$ dmidecode -q # 打印所有硬件信息,⽐较简洁[root@localhost ~]$ dmidecode | grep'Product Name' # 以过滤的⽅式来查看指定的硬件信息[root@localhost ~]$ dmidecode -t bios # 查看BIOS相关的硬件信息[root@localhost ~]$ dmidecode -t system # 查看系统相关的硬件信息[root@localhost ~]$ dmidecode -t baseboard # 查看主板相关的硬件信息[root@localhost ~]$ dmidecode -t chassis # 查看机箱相关的硬件信息[root@localhost ~]$ dmidecode -t processor # 查看处理器相关的硬件信息[root@localhost ~]$ dmidecode -t memory # 查看内存相关的硬件信息查看系统相关的硬件信息dmidecode -t systemdmidecode -t system# dmidecode 2.12SMBIOS 2.5 present.Handle 0x0001, DMI type 1, 27 bytesSystem InformationManufacturer: System manufacturerProduct Name: System Product NameVersion: System VersionSerial Number: System Serial NumberUUID: 00797DF5-8DFE-D511-A89C-3085A9A895F8Wake-up Type: Power SwitchSKU Number: To Be Filled By O.E.M.Family: To Be Filled By O.E.M.Handle 0x0035, DMI type 15, 55 bytesSystem Event LogArea Length: 1008 bytesHeader Start Offset: 0x0810Data Start Offset: 0x0810Access Method: Memory-mapped physical 32-bit addressAccess Address: 0xFFFBC000Status: Valid, Not FullChange Token: 0x00000000Header Format: No HeaderSupported Log Type Descriptors: 11Descriptor 1: OEM-specificData Format 1: Multiple-event handleDescriptor 2: OEM-specificData Format 2: Multiple-event handleDescriptor 3: Single-bit ECC memory errorData Format 3: POST results bitmapDescriptor 4: Multi-bit ECC memory errorData Format 4: POST results bitmapDescriptor 5: Parity memory errorData Format 5: Multiple-eventDescriptor 6: I/O channel blockData Format 6: Multiple-eventDescriptor 7: POST errorData Format 7: POST results bitmapDescriptor 8: PCI parity errorData Format 8: Multiple-event handleDescriptor 9: PCI system errorData Format 9: Multiple-event handleDescriptor 10: System limit exceededData Format 10: Multiple-event system managementDescriptor 11: OEM-specificData Format 11: POST results bitmapHandle 0x0050, DMI type 32, 20 bytesSystem Boot InformationStatus: No errors detected查看服务器型号:dmidecode | grep 'Product Name' dmidecode |grep'Product Name'Product Name: System Product NameProduct Name: Z8NR-D12dmidecode | grep -i productProduct Name: System Product NameProduct Name: Z8NR-D12查看主板的序列号:dmidecode |grep 'Serial Number' dmidecode |grep'Serial Number'Serial Number: System Serial NumberSerial Number: 120902356500037Serial Number: Chassis Serial NumberSerial Number: To Be Filled By O.E.M.Serial Number: To Be Filled By O.E.M.Serial Number: D8CC0900Serial Number: SerNum01Serial Number: SerNum02Serial Number: SerNum03Serial Number: SerNum04Serial Number: SerNum05Serial Number: D8CC0900Serial Number: SerNum07Serial Number: SerNum08Serial Number: SerNum09Serial Number: SerNum10Serial Number: SerNum11查看系统序列号:dmidecode -s system-serial-number dmidecode -s system-serial-numberSystem Serial Number查看OEM信息:dmidecode -t 11dmidecode -t 11# dmidecode 2.12SMBIOS 2.5 present.Handle 0x0033, DMI type 11, 5 bytesOEM StringsString 1: To Be Filled By O.E.M.String 2: To Be Filled By O.E.M.String 3: To Be Filled By O.E.M.String 4: To Be Filled By O.E.M.查询内存条数:[root@mysql ~]# dmidecode -t 17 | grep"Size.*MB" | wc -l2第⼀、dmidecode查看主板信息dmidecode -t 2 = dmidecode -t baseboard[root@mysql ~]#dmidecode -t 2# dmidecode 2.12SMBIOS 2.5 present.Handle 0x0002, DMI type 2, 15 bytesBase Board InformationManufacturer: ASUSTeK Computer INC.Product Name: Z8NR-D12Version: Rev 1.xxGSerial Number: 120902356500037Asset Tag: To Be Filled By O.E.M.Features:Board is a hosting boardBoard is replaceableLocation In Chassis: To Be Filled By O.E.M.Chassis Handle: 0x0003Type: MotherboardContained Object Handles: 0第⼆、使⽤dmidecode查询内存(RAM)信息dmidecode -t 16⾸先,可以通过以下命令查询机器最⼤⽀持的内存总量[root@mysql ~]#dmidecode -t 16# dmidecode 2.12SMBIOS 2.5 present.Handle 0x0036, DMI type 16, 15 bytesPhysical Memory ArrayLocation: System Board Or MotherboardUse: System MemoryError Correction Type: Multi-bit ECCMaximum Capacity: 96 GBError Information Handle: Not ProvidedNumber Of Devices: 12这⾥可以查看到当前服务器允许扩容的最⼤内存⼤⼩,从以上输出可知,该机器理论上⽀持的最⼤内存为96G。
DEBUG的命令及功能1. A(assemble):将指令转换成机器码并存储到内存中。
-A100:在内存地址100处开始输入指令。
2. D(dump):显示内存中的内容。
-D100200:显示内存地址从100到200的内容。
3. E(enter):修改内存中的数据。
-E1004000:在内存地址100处将数据修改为40。
4. G(go):执行程序。
-G100:从内存地址100处开始执行程序。
6. Q(quit):退出DEBUG。
-Q:退出DEBUG程序。
7. R(registers):显示和修改CPU寄存器的值。
-R:显示所有寄存器及其值。
-RAX1234:将AX寄存器的值修改为12348. T(trace):单步跟踪程序的执行。
-T:执行下一条指令并停止。
9. P(proceed):继续执行程序直至下一个断点或程序结束。
-P:继续执行程序。
10. U(unassemble):将机器码转换成指令。
-U100120:从内存地址100处开始将机器码转换成指令。
11. B(breakpoint):设置断点。
-B100:在内存地址100处设置断点。
12. S (search):在内存中指定的内容。
- S 100 200 "Hello": 在内存地址100到200之间字符串"Hello"。
13. L(load):加载程序到内存中。
-L100:从内存地址100处加载程序。
14. W(write):将内存中的数据写入文件。
- W 100 200 file.txt: 将内存地址100到200的数据写入到文件file.txt。
15. M(move):将内存中的数据移动到指定的地址。
-M100200300:将内存地址100到200的数据移动到地址300处。
16. X (execute):执行子程序。
-X100:从内存地址100处执行子程序。
17. H(help):显示DEBUG命令的帮助信息。
DEBUG主要命令DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
1.DEBUG程序的调用在DOS的提示符下,可键入命令:C:>DEBUG [d:][path][文件名][参数1][参数2]其中文件名是被调试文件的名字,它必须是可执行文件(EXE),两个参数是运行被调试文件所需要的命令参数,在DEBUG程序调入后,出现提示符“-”,此时,可键入所需的DEBUG命令。
2.DEBUG的主要命令⑴显示内存单元内容的命令D,格式为:-D [地址] 或-D [范围]例如,显示指定范围内存单元内容的方法为:-D 100 1FF18E4:0100 47 06 04 02 38 01 47 06 -06 02 00 02 47 06 08 02 G...8.G.....G...18E4:0110 02 02 3B 04 02 68 02 00 -4D 20 50 51 56 57 8B 37 ..;..h..M PQVW.7 其中左边为十六进制表示形式,右边为ASCII码表示形式,“.”表示不可显示字符。
这里没有指定段地址,D命令自动显示DS段的内容。
⑵修改内存单元内容的命令E,它有两种格式1)用给定内容代替指定范围的单元内容,格式为:-E 地址内容表例如:-E DS:100 F358595A8D,即用F3,58,59,5A,8D五个字节代替内存单元DS:100到DS:104的内容。
2)逐个单元相继地修改,格式为:-E 地址例如:-E DS:10018E4:0100 89.78此命令是将0100单元内容89改为78。
78是程序员从键盘输入的。
程序员在修改完一个单元后,可按“空格”键继续修改下一单元内容,直至按“回车”键结束该命令。
⑶检查和修改寄存器内容的命令R,它有三种方式1)显示CPU内部所有寄存器内容和标志寄存器中的各标志位状态-R该命令可显示AX,BX,CX,DX,SP,BP,SI,DI,DS,ES,SS,CS,IP及标志寄存器内容。
DEBUG命令的功能及使用功能:1.单步执行:DEBUG命令可以逐条执行程序的指令,并在每个指令被执行后停止程序的执行。
这使得开发人员能够逐步查看程序的执行过程,以便找到潜在的错误和问题。
2.查看和修改内存:DEBUG命令允许开发人员查看程序运行时的内存状态,并且提供了一些命令来读取和修改内存中的数据。
这对于调试内存泄漏、内存溢出和指针问题非常有用。
3.断点:DEBUG命令可以在程序的特定位置设置断点,一旦程序执行到这个位置,就会自动停止执行。
这使得开发人员可以在关键点查看程序的状态,以便分析问题。
4.寄存器查看和修改:DEBUG命令允许开发人员查看和修改程序运行时的寄存器值。
这对于理解程序如何处理数据以及跟踪特定变量的值非常有用。
5. 注册表和文件系统访问:DEBUG命令可以访问Windows注册表和文件系统,以检查和修改系统的配置和状态。
这对于调试与注册表和文件系统相关的问题非常有用。
使用:1.运行DEBUG命令:在命令行窗口中输入"DEBUG"命令,然后按下回车键即可运行DEBUG命令。
DEBUG命令会显示一个提示符,表示它已经准备好接受命令。
2.设置断点:使用"t"命令可以在程序中设置断点。
例如,要在程序的第10行设置一个断点,可以输入"t10"命令。
3.单步执行:使用"p"命令可以逐步执行程序的指令。
每次执行一条指令后,DEBUG命令会显示当前指令的汇编代码和程序计数器的值,并等待用户输入下一个命令。
4.查看内存:使用"d"命令可以查看指定内存地址的内容。
例如,输入"d1000"命令可以查看地址为1000的内存单元的内容。
5.修改内存:使用"e"命令可以修改指定内存地址的内容。
例如,输入"e100090"命令可以将地址为1000的内存单元的内容修改为90。
DEBUG各命令详细说明(很详细)2.启动DEBUG在命令窗口中启动DEBUG,启动命令一般为:DEBUG [文件名] [参数表]。
其中:文件名指定被调试的文件,其包括名和后缀,参数表是被调试文件运行时所需要的参数。
被调试的文件可以是系统中的任何文件,但通常它们的后缀为.EXE或.COM。
当DEBUG启动成功后,将显示连接符“-”,这时,可输入各种DEBUG命令。
DEBUG中所有命令及其含义如DEBUG各命令功能说明表所示。
关于使用命令的几点说明:在提示符“-”下才能输入命令,在按“回车”键后,该命令才开始执行命令是单个字母,命令和参数的大小写可混合输入可用F1、 F2、F3、Ins、Del、左移键、右移键等编辑键来编辑本行命令当命令出现语法错误时,将在出错位置显示“^ Error”可用Ctrl+C或Ctrl+Break来终止当前命令的执行,还可用Ctrl+S或Ctrl+Num Lock来暂停屏幕显示(当连续不断地显示信息时)以下通过实现十九个示例来熟悉DEBUG的命令集和基本的汇编指令。
R命令的使用R命令作用:观看和修改寄存器的值。
在提示符“-”下输入以下命令:R。
DEBUG将会显示出当前所有寄存器和标志位的状态。
接下来再输入命令RCX。
在提示符“:”后输入100。
该命令的作用是将寄存器CX的值设置为100(注意:DEBUG使用的是十六进制,这里的100相当于十进制的256。
)最后再执行R命令,观看修改后的寄存器值。
H命令的使用H命令作用:计算两个十六进制数的和与差。
在提示符“–”下输入以下命令:H 10 1。
观看命令执行结果。
运行结果的前一个数是计算出来的和,后一个数是计算出来的差。
计算结果均用十六进制形式表示。
D命令的使用D命令作用:显示内存区域的内容。
在提示符“–”下连续执行命令R、D、D。
观看命令执行结果。
前面已经介绍过了,命令R的作用是显示当前寄存器的值。
而命令D的作用是显示内存区域的内容,最左边是内存的起始地址,中间以十六进制的形式显示内存值,最右边是以ASCII码的形式显示内存值。
linux outputdebugstring用法一、引言OutputDebugString 是 Windows 操作系统中用于调试的一种方法,而在 Linux 系统中,虽然没有直接的 OutputDebugString 函数,但我们可以使用其他方法来实现类似的功能。
本文将介绍在Linux 系统中如何使用类似的机制来输出调试信息。
二、使用方法1. 使用 echo 命令输出调试信息:在终端中,可以使用 echo 命令将调试信息输出到终端。
例如,要输出字符串 "Debug information" 到终端,可以使用以下命令:`echo "Debug information"`。
2. 使用 printf 命令输出调试信息:printf 命令在 Linux 中常用于格式化输出。
与 echo 命令类似,可以使用 printf 命令输出调试信息。
例如,要输出字符串 "Debug information" 到终端,可以使用以下命令:`printf "Debug information"`。
3. 使用重定向符号输出调试信息:在 Linux 中,可以使用重定向符号(>、>>)将输出重定向到文件中。
通过将调试信息重定向到一个文件中,可以在需要时查看和分析调试信息。
例如,要将调试信息输出到一个名为 debug.log 的文件中,可以使用以下命令:`echo "Debug information" > debug.log`。
4. 使用终端的内置调试功能:在终端中,可以使用一些内置的调试功能,如使用 set 命令查看环境变量和配置文件,使用echo_after_prompt 参数控制是否在命令提示符下显示输出等。
这些功能可以帮助开发人员更好地理解终端的行为和配置。
三、注意事项1. 调试信息的格式和内容:在输出调试信息时,应确保信息的格式和内容清晰、易于理解。
常用Linux系统Debug命令常用Linux系统Debug命令命令系统,是一种计算机代码控制系统。
常用Linux系统Debug 命令有哪些呢?下面是相关的知识,欢迎阅读。
1、查看TCP连接状态netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rnnetstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}'netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key," ",state[key]}'netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k," ",arr[k]}'netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rnnetstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rnnetstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}'netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key," ",state[key]}'netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k," ",arr[k]}'netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rnnetstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c2、查找请求80端口最多的20个IP连接netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A,i}' |sort -rn|head -n20tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print$1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -n 203、查找较多time_wait连接netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n204、找查较多的SYN连接netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more5、根据端口列进程netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f16、获取Web访问前10位的'ip地址cat access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -n 10 cat access.log|awk '{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}'7、访问次数最多的文件或页面,取前20cat access.log|awk '{print $11}'|sort|uniq -c|sort -nr|head -n 208、列出传输最大的几个rar文件cat access.log|awk '{print $11}'|sort|uniq -c|sort -nr|head -n 209、列出输出大于200000byte(约200kb)的rar文件以及对应文件发生次数cat access.log |awk '($10 > 200000 && $7~/.rar/){print $7}'|sort -n|uniq -c|sort -nr|head -n 10010、如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面cat access.log |awk '($7~/.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -n 100cat access.log |awk '($7~/.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -n 10011、列出最最耗时的页面(超过60秒的)的以及对应页面发生次数cat access.log |awk '($NF > 60 && $7~/.php/){print $7}'|sort -n|uniq -c|sort -nr|head -n 10012、列出传输时间超过 30 秒的文件cat access.log |awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -n 2013、统计网站流量(G)cat access.log |awk '{sum+=$10} END {print sum/1024/1024/1024}'14、统计404的连接awk '($9 ~/404/)' access.log | awk '{print $9,$7}' | sort15、统计http statuscat access.log |awk '{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}'cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn16、查看是哪些爬虫在抓取内容tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'17、查看数据库执行的sql语句tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREAT E|DROP|ALTER|CALL'18、按域统计流量zcat squid_access.log.tar.gz| awk '{print $10,$7}' |awk 'BEGIN{FS="[ /]"}{trfc[$4]+=$1}END{for(domain in trfc){printf "%s %d ",domain,trfc[domain]}}'19、调试命令strace -p pid20、磁盘性能iostat -x 1 10【常用Linux系统Debug命令】。
Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。
和所有常用的调试工具一样,gdb提供了以下功能:# 监视程序中变量的值# 在程序中设置断点# 程序的单步执行在使用gdb前,必须先载入可执行文件,因为要进行调试,文件中就必须包含调试信息,所以在用gcc或cc编译时就需要用-g参数来打开程序的调试选项。
调试开始时,必须先载入要进行调试的程序,可以用以下两种方式:* 在启动gdb后执行以下命令:file 可执行文件路径* 在gdb启动时就载入程序:gdb 可执行文件路径载入程序后,接下来就是要进行断点的设置,要监视的变量的添加等工作,下面对在这个过程中常会用到的命令逐一进行介绍:* list:显示程序中的代码,常用使用格式有:list输出从上次调用list命令开始往后的10行程序代码。
list -输出从上次调用list命令开始往前的10行程序代码。
list n输出第n行附近的10行程序代码。
list function输出函数function前后的10行程序代码。
* forward/search:从当前行向后查找匹配某个字符串的程序行。
使用格式:forward/search 字符串查找到的行号将保存在$_变量中,可以用print $_命令来查看。
* reverse-search:和forward/search相反,向前查找字符串。
使用格式同上。
* break:在程序中设置断点,当程序运行到指定行上时,会暂停执行。
使用格式:break 要设置断点的行号* tbreak:设置临时断点,在设置之后只起作用一次。
使用格式:tbreak 要设置临时断点的行号* clear:和break相反,clear用于清除断点。
使用格式:clear 要清除的断点所在的行号* run:启动程序,在run后面带上参数可以传递给正在调试的程序。
debug指令详解一、DEBUG概述DEBUG是在DOS状态下面供程序员使用的程序调试工具。
它可以用来检查内存中任何地址中的内容以及修改特定地址中的内容。
DEBUG还可以用于逐指令执行某个程序,追踪程序的执行过程,比较一条指令执行前后数值变化情况,读写文件与磁盘扇区。
此外,DEBUG还可以用于读写端口中的数值。
在DEBUG状态下,所有数据都作为字节序列,可以用DEBUG把任何类型的文件读入内存中。
DEBUG能够处理的数据为两种: 十六进制数和ASCⅡ码,使用两位数表示十六进制数据(0~9,A~F)。
在DEBUG中涉及内存中的数据时,要指定数据所在的内存单元的地址,地址的输入格式是: [段地址]: [位移]。
如果没有输入地址,DEBUG将假定为当前内存段,从位于地址100H的字节开始。
前100H字节保留给程序段前缀使用(称PSP结构,包含程序执行的各种信息),该区域用于建立DOS与程序之间的联系。
在DEBUG中,使用四位十六进制数表示地址(0~9,A~F)。
DEBUG输入数据时有两种方法: 提示方法和非提示方法。
在提示方法下,输入要求输入数据的命令,后跟保存数据的地址。
执行后可以看到该地址中已有的内容及一个冒号提示符。
此时可以在提示符下输入一个新的值或者按下回车键或CTRL+C回到“—”提示符。
在非提示方法下,输入保持数据的内存地址以及要输入的数据。
DEBUG的启动:进入DOS 状态下,键入DEBUG ,按ENTER键,如: C:\>DEBUG ,则屏幕显示:-符号“-”是进入DEBUG的提示符,在该提示符下可键入任意DEBUG命令。
DEBUG的退出:在DEBUG的提示符后输入Q命令,按ENTER键,则退出DEBUG返回DOS。
DEBUG的使用:在DEBUG的提示符后输入DEBUG命令,按ENTER键。
二、DEBUG 命令详解★A命令格式:A[地址]功能:将指令直接汇编成机器码输入到内存中。
汇编_DEBUG的使用汇编语言是一种低级语言,它与机器语言非常接近,每一个汇编语言的指令几乎都对应着一条机器指令。
因此,了解并掌握汇编语言对于理解计算机内部工作原理以及进行底层编程是非常有帮助的。
下面,我将详细介绍DEBUG的使用方法和功能。
1.DEBUG的启动和退出:在DOS命令行下输入DEBUG命令,即可启动DEBUG。
DEBUG启动后,会显示一个短横线"-”,表示等待执行命令。
在DEBUG中输入"q"命令,即可退出DEBUG。
2.DEBUG的命令格式和常用命令:-a:将键盘输入的ASCII码写入指定地址-d:显示内存中的指定地址的内容-e:修改内存中的指定地址的内容-g:从指定地址开始执行程序-r:查看和修改寄存器的值-t:查看和修改标志寄存器的值-u:以汇编代码的格式显示内存中的指令-w:将内存中的内容写入指定文件-n:加载并执行指定文件-i:打印当前的执行指令-f:在段间切换3.DEBUG的常用调试操作:- 通过“d”命令查看内存中的指令和数据内容,可以使用不同的参数来控制显示格式,如"d 100"表示从100H地址处开始显示,"d cs:100"表示从CS:100H地址处开始显示。
-通过“e”命令修改内存中的指令和数据内容。
- 通过“r”命令查看和修改寄存器的值,如"r ax"表示查看和修改AX寄存器的值。
-通过“u”命令以汇编代码的格式显示内存中的指令。
-通过“g”命令从指定地址开始执行程序。
-通过“n”命令加载并执行指定的二进制文件。
4.示例:下面给出一个使用DEBUG调试的示例过程:-启动DEBUG,进入DEBUG命令行界面。
-使用“n”命令加载一个二进制文件。
-使用“d”命令查看内存中的指令和数据,以及寄存器的值。
-使用“e”命令修改内存中的指令和数据。
-使用“g”命令执行程序。
-使用“r”命令查看和修改寄存器的值。
Linux Socket Debug方法是指在Linux系统中,利用Socket API对网络通信进行调试的方法。
通过Socket Debug,开发人员可以在通信过程中捕获和分析数据包,以检查网络连接是否正常、数据传输是否正确。
这对于排查网络故障和优化网络性能非常有帮助。
使用Socket Debug的一般步骤包括:
1.创建一个Socket,使用socket()函数创建一个Socket,指定使用TCP或
UDP协议。
2.绑定Socket,使用bind()函数将Socket与本地IP地址和端口绑定。
3.使Socket进入监听状态,等待客户端连接,使用listen()函数。
4.接受客户端的连接请求,并返回一个新的Socket,使用accept()函数。
5.从客户端接收数据,并进行分析,使用recv()函数。
6.向客户端发送数据,使用send()函数。
7.在数据传输完成后,关闭Socket,使用close()函数。
以上信息仅供参考,可以查阅关于Linux Socket Debug的文献资料以获取更全面准确的信息。
adb linux用法ADB(Android Debug Bridge)是一个用于在计算机和 Android 设备之间进行通信的命令行工具。
它提供了一系列的命令,用于调试、安装、卸载和管理 Android 设备上的应用程序。
本文将介绍如何在Linux 系统上使用 ADB。
一、安装 ADB在 Linux 系统中,安装 ADB 非常简单。
可以通过以下命令安装ADB:sudo apt-get install adb二、连接 Android 设备在使用 ADB 之前,首先需要将 Android 设备与计算机连接起来。
可以通过 USB 连接线将设备与计算机相连。
确保设备已打开调试模式。
连接成功后,可以使用以下命令检查设备是否已连接:adb devices三、常用命令1. 查看设备状态adb devices使用该命令可以查看当前已连接的设备列表。
如果设备已连接并且正常工作,设备序列号将会显示在列表中。
2. 安装应用程序adb install <path_to_apk>通过该命令可以安装位于 <path_to_apk> 路径下的应用程序到设备上。
安装完成后,应用程序将会出现在设备的应用列表中。
3. 卸载应用程序adb uninstall <package_name>使用该命令可以卸载设备上的应用程序。
需要指定应用程序的包名(package name)。
4. 启动应用程序adb shell am start -n <package_name>/<activity_name>使用该命令可以启动设备上的应用程序。
需要指定应用程序的包名和主活动的名称。
5. 查看日志adb logcat通过该命令可以查看设备上的系统日志。
日志信息将实时输出到终端窗口。
6. 复制文件adb pull <remote_path> <local_path>使用该命令可以从设备上复制文件到计算机。
mtd_debug:linux下直接读写flash扇区及交叉编译mtd_utilsmtd_debug是一个linux下直接读写flash扇区的工具,是mtd-utils的一个部件。
具体用法如下:./mtd_debug read <device><offset> <dest-filename> <len> ./mtd_debug write <device><offset> <source-filename> [len]./mtd_debug erase <device><offset> <len>具体使用举例:./mtd_debug erase/dev/mtd/1 0x0 0xc00000 :表示擦写了0x34300000 ~ 0x34f00000共12MB的空间。
以上命令格式中“device”是指/dev/mtd/0,1,2这种mtd char 设备,不要操作/dev/mtdblock/0,1,2这种块设备。
也就是说:mtd 是字符设备,mtdblock是块设备,它们映射的是同一个空间;但是我们在擦写的时候就是操作字符设备,这个请注意。
以上不管是write哪一块,都建议先erase,再write,否则可能导致write失败mtd_debug的获取或者说交叉编译mtd_utils1.获得源码root@:/home/# wget ftp:///pub/mtd-utils/mtd-utils-1.2.0.tar.bz2root@:/home/# wget /zlib-1.2.3.tar.gzroot@:/home/# wget /opensource/lzo/download/lzo-2.03.tar.gzroot@:/home/# tar xzvf zlib-1.2.3.tar.gzroot@:/home/# tar xzvf lzo-2.03.tar.gzroot@:/home/# tar xzvf mtd-utils-1.2.0.tar.bz2说明:zlib和lzo是编译mtd-utils所需库文件,需提前交叉编译完成,以供mtd-utils编译时调用2,编译安装zlib:root@:/home/# cd zlib-1.2.3root@:/home/zlib-1.2.3# CC=arm-linux-gcc ./configure --shared --prefix=/usr/local/openmoko/arm/arm-angstrom-linux-gnueabiroot@:/home/zlib-1.2.3# makeroot@:/home/zlib-1.2.3# make installroot@:/home/zlib-1.2.3# cd ../usr/local/openmoko/arm/arm-angstrom-linux-gnueabi 为交叉编译器路径3,编译安装lzo:root@:/home/# cd lzo-2.03/root@:/home/lzo-2.03# CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/usr/local/openmoko/arm/arm-angstrom-linux-gnueabiroot@:/home/lzo-2.03# makeroot@:/home/lzo-2.03# make installroot@:/home/lzo-2.03#4,编译mtd-utils1) 修改MakefileCROSS=arm-linux-2) make WITHOUT_XATTR=1在这里会提示没有定义AI_ADDRCONFIG,在文件头部加入定义#define AI_ADDRCONFIG 0x0020 就可以了到这里还是有错误提示。
DEBUG的命令及功能
在软件开发和调试过程中,调试(Debugging)是一个关键步骤,它用于定位和解决代码中的错误和缺陷。
为了有效地进行调试,开发人员经常使用调试工具和命令来检查和分析代码的执行过程。
下面是一些常见的调试命令及其功能。
总结起来,调试命令是开发人员在调试过程中使用的工具,旨在帮助他们分析代码的执行过程、检查变量的值和状态,并解决代码中的错误和缺陷。
在大多数集成开发环境(IDE)和调试器中,这些命令通常都有单独的按钮、快捷键和菜单选项,使开发人员可以方便地使用它们。
调试命令的功能是非常丰富和多样化的,可以根据开发人员的需求和调试场景进行选择和配置。
DEBUG在每个人的机器里都会有,只是很多人对它都很陌生,不要小看它,对你的破解会很有帮助的。
如你掌握了它的用法,对你的日常使用及维护工作会带来很大的方便,下面介绍一些它的基本指令用法:指令格式功能备注A A [记忆体位址] 组译汇编语言指令A 100C C [区段1] [区段范围] [区段2] 将两块内存作比较C 100 L20 200D D [记忆体拉址] 显示记忆体的内容D 100E E [记忆体位址] 编辑记忆体资料E 100F F [指定区段范围] 填充指定内存区块内容F 100 L10 90G G [区段:区址]带有任选断点执行G 100H H [运算子] [运算子]十六进制加减运算H 44 33I I [端口]读/显示输入字节L L [记忆位址]或[磁碟,磁轨,磁区] 装入文件或磁区L 100 2 1 2M M [区段范围] [记忆体位址]传送内存区块M 100 L10 110N N [档案名称] 定义文件及参量N O O [端口位址] 输出字节到端口P P [区段:区址]在下一指令上停止P 2Q Q 退出DEBUG 界面QR R [寄存器] 显示修改寄存器/标志R AXS S [记忆区段范围] 对字符进行检索S 100 L70 'j'T T [=记忆区段]或[数值范围]单步追踪TU U [记忆位址] 对指令进行反汇编U 100W W [记忆区段]或[指定范围] 写入文件或磁盘扇区W 100 0 1 1下面对一些常用指令进行详细剖析:A (Assemble)汇编指令1、输入汇编语句被汇编到内存的指定区段,此区段在开始时用A address 指定。
2、所有语句输入完成后,按ENTER 键返回。
3、完成输入后,可以用U 命令观看它的机械码。
D (Dump)显示命令1、从指定的地址开始显示内容,如果没有指定地址,则从前一个D命令继续显示。
2、如果没指定地址并是第一次,则从DS:100 处开始显示。
Debug的基本使用1.使用r命令查看或修改CPU寄存器的内容。
(1)使用r的命令查看:(2)使用r来改变寄存器中的内容:例如修改AX的值,就需输入“r ax”后按Enter键,在出现的“:”后面输入要写入的数据,并按Enter,再用r查看,修改成功,如图1所示。
图1用r来修改Ip的值,如图2所示。
2.用d来查看内存的内容。
(1)直接输入d,debug将输出3部分内容,如图3所示。
图3(2)可以使用“d 段地址:偏移地址”的格式,例如想查看内存10000H处的内容。
(3)在使用“d 段地址:偏移地址”之后,接着使用d命令,可列出后续的内容,如图5所示。
图5(4)使用d命令查看范围,格式为“d 段地址:起始偏移地址结尾偏移地址”。
例如要查看1000:0到1000:9中的内容,如图6所示。
图63.用e来改写内存中的内容。
(1)将内存1000:0-1000:9中的内容分别改为0、1、2、3、4、5、6、7、8、9,其格式为“e 起始地址数据数据数据。
”,如图7所示。
图7(2)用提问的方法改写内存的内容。
以1000:10为起始地址进行改写,其步骤为:输入“e 1000:10”,并按Enter,在显示光标后面输入想要修改的内容,如果想停止输入,就按Enter,继续就按空格键。
(在显示光标后面直接按空格键,则表示不对当前内存单元进行改写)(3)用e向内存中写入字符。
(4)用e命令向内存中写入字符串。
(5)用e命令向内存中写入机器码,用u命令查看内存中机器码的含义,用t命令执行内存中的机器码。
例如要从内存1000:0单元开始写入机器码:b80100b9020001c8,其方法如图8所示。
图8用u将从1000:0开始的内存单元中的内容翻译为汇编指令并显示出来。
(见图9)使用t命令可以执行CS:IP指向的指令。
(图10)图10执行T命令后,cpu执行CS:IP指向的指令,则1000:0处的指令b8 01 00(mov ax,0001)得到执行。
linuxdebugbacktrace用法在Linux系统中,调试是开发过程中非常重要的一部分。
在处理错误和异常时,backtrace是一种非常有用的工具,可以帮助我们了解程序在发生错误时的执行流程。
今天,我们就来详细了解一下Linux 中的debugbacktrace用法。
一、backtrace简介backtrace是一种用于生成程序调用堆栈的技术,可以帮助开发者找出程序中发生错误的位置。
在Linux系统中,backtrace通常是通过调用特定系统调用来实现的。
二、backtrace的用法1.使用gdbbacktrace在Linux中,我们可以使用gdb工具来生成backtrace。
首先,我们需要将程序附加到gdb中,然后使用backtrace命令来生成调用堆栈。
例如,假设我们有一个名为test的程序,其中包含一个函数foo(),该函数调用了另一个函数bar()。
如果我们想要找出foo()中发生错误的位置,可以使用以下命令:```shellgdbtestgdb>backtrace```这将会生成一个包含程序中所有函数调用的堆栈信息。
通过分析这个堆栈信息,我们可以找出发生错误的具体位置。
2.使用perf工具生成backtraceperf是Linux中的一个性能分析工具,它也可以用于生成backtrace。
与gdb不同,perf提供了更强大的性能分析功能,可以分析CPU使用情况、缓存命中率等。
要使用perf生成backtrace,需要先安装perf工具,并使用以下命令:```shellperfrecord-g./test```这将会生成一个包含程序调用堆栈的perf文件。
之后可以使用以下命令来分析perf文件:```shellperfreport```这将会显示出程序中所有函数的调用堆栈信息,帮助我们找出发生错误的具体位置。
三、注意事项在使用backtrace进行调试时,需要注意以下几点:1.backtrace只能用于调试已经发生的错误,不能用于预防错误的发生。
常用Linux系统Debug命令
常用Linux系统Debug命令
命令系统,是一种计算机代码控制系统。
常用Linux系统Debug 命令有哪些呢?下面是相关的知识,欢迎阅读。
1、查看TCP连接状态
netstat-nat|awk'{print$6}'|sort|uniq-c|sort-rn
netstat-
n|awk'/^tcp/{++S[$NF]};END{for(ainS)printa,S[a]}'
netstat-
n|awk'/^tcp/{++state[$NF]};END{for(keyinstate)printkey,"",s tate[key]}'
netstat-
n|awk'/^tcp/{++arr[$NF]};END{for(kinarr)printk,"",arr[k]}'
netstat-n|awk'/^tcp/{print$NF}'|sort|uniq-c|sort-rn
netstat-ant|awk'{print$NF}'|grep-v'[a-z]'|sort|uniq-c
netstat-nat|awk'{print$6}'|sort|uniq-c|sort-rn
netstat-
n|awk'/^tcp/{++S[$NF]};END{for(ainS)printa,S[a]}'
netstat-
n|awk'/^tcp/{++state[$NF]};END{for(keyinstate)printkey,"",s tate[key]}'
netstat-
n|awk'/^tcp/{++arr[$NF]};END{for(kinarr)printk,"",arr[k]}'
netstat-n|awk'/^tcp/{print$NF}'|sort|uniq-c|sort-rn
netstat-ant|awk'{print$NF}'|grep-v'[a-z]'|sort|uniq-c
2、查找请求80端口最多的20个IP连接
netstat-anlp|grep80|greptcp|awk'{print$5}'|awk-
F:'{print$1}'|sort|uniq-c|sort-nr|head-n20
netstat-
ant|awk'/:80/{split($5,ip,":");++A[ip[1]]}END{for(iinA)prin tA,i}'|sort-rn|head-n20
tcpdump-ieth0-tnndstport80-c1000|awk-
F"."'{print$1"."$2"."$3"."$4}'|sort|uniq-c|sort-nr|head-n20
3、查找较多time_wait连接
netstat-n|grepTIME_WAIT|awk'{print$5}'|sort|uniq-c|sort-rn|head-n20
4、找查较多的SYN连接
netstat-an|grepSYN|awk'{print$5}'|awk-
F:'{print$1}'|sort|uniq-c|sort-nr|more
5、根据端口列进程
netstat-ntlp|grep80|awk'{print$7}'|cut-d/-f1
6、获取Web访问前10位的ip地址
cataccess.log|awk'{print$1}'|sort|uniq-c|sort-nr|head-n10
cataccess.log|awk'{counts[$(11)]+=1};END{for(urlincounts )printcounts[url],url}'
7、访问次数最多的文件或页面,取前20
cataccess.log|awk'{print$11}'|sort|uniq-c|sort-nr|head-n20
8、列出传输最大的几个rar文件
cataccess.log|awk'{print$11}'|sort|uniq-c|sort-nr|head-n20
9、列出输出大于200000byte(约200kb)的rar文件以及对应文件发生次数
cataccess.log|awk'($10>200000&&$7~/.rar/){print$7}'|sort -n|uniq-c|sort-nr|head-n100
10、如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的'页面
cataccess.log|awk'($7~/.php/){print$NF""$1""$4""$7}'|sor t-nr|head-n100
cataccess.log|awk'($7~/.php/){print$NF""$1""$4""$7}'|sor t-nr|head-n100
11、列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
cataccess.log|awk'($NF>60&&$7~/.php/){print$7}'|sort-
n|uniq-c|sort-nr|head-n100
12、列出传输时间超过30秒的文件
cataccess.log|awk'($NF>30){print$7}'|sort-n|uniq-c|sort-nr|head-n20
13、统计网站流量(G)
cataccess.log|awk'{sum+=$10}END{printsum/1024/1024/1024} '
14、统计404的连接
awk'($9~/404/)'access.log|awk'{print$9,$7}'|sort
15、统计httpstatus
cataccess.log|awk'{counts[$(9)]+=1};END{for(codeincounts )printcode,counts[code]}'
cataccess.log|awk'{print$9}'|sort|uniq-c|sort-rn
16、查看是哪些爬虫在抓取内容
tcpdump-ieth0-l-s0-w-dstport80|strings|grep-iuser-
agent|grep-i-E'bot|crawler|slurp|spider'
17、查看数据库执行的sql语句
tcpdump-ieth0-s0-l-w-dstport3306|strings|egrep-
i'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DR OP|ALTER|CALL'
18、按域统计流量
zcatsquid_access.log.tar.gz|awk'{print$10,$7}'|awk'BEGIN {FS="[/]"}{trfc[$4]+=$1}END{for(domainintrfc){printf"%s%d", domain,trfc[domain]}}'
19、调试命令
strace-ppid
20、磁盘性能
iostat-x110。