LINUX下C/C++常见的几种调试程序的方法

news/2024/11/9 13:21:17

第一章:巧用宏变量

__FILE__:记录源代码文件。

__LINE__:记录源代码行数。(是整数类型)

__DATE__:记录编译日期。

__TIME__: 记录编译时间

__func__:记录函数

 

#include <stdlib.h>

#include <stdio.h>

int main()

{

  printf("Date of make: %s, %s  \n",__DATE__,__TIME__);

  printf("FILE=%s LINE=%d\n",__FILE__,__LINE__);

  printf("func=%s\n",__func__);

  return 0;

}

 

第二章:巧用abrt

linux调试程序,最痛苦的就是程序异常宕掉,但是找不到core文件,很难定位问题。但是有了core文件就容易定位多了。

一般是可以通过在环境变量中设置ulimit -c unlimited。但是现场实施人员有时会忘记设置这条命令。那么怎么办呢,可以通过设置linuxabrt服务来实现

 

修改abrt-action-save-package-data.conf文件

vi /etc/abrt/abrt-action-save-package-data.conf

OpenGPGCheck = no

ProcessUnpackaged = yes

 

abrt服务启动

第三章:巧用gdb

Ø 给现场发布 debug 编译的文件
Ø
Ø gdb 调试 core 文件

例如: gdb scf core.112332

Ø
Ø gdb attach [ pid ]

例如: gdb attach 782712

Ø
Ø 采用 gcore 生成 core 文件

gcore -o ssp.core [pid]

 

gdb 常用命令

help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h

runrun argv[1] argv[2]:调试时命令行传参

list:查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数),简写l

set:设置变量的值

next:单步调试(逐过程,函数直接执行),简写n

step:单步调试(逐语句:跳入自定义函数内部执行),简写s

backtrace:查看函数的调用的栈帧和层级关系,简写bt

frame:切换函数的栈帧,简写f

info:查看函数内部局部变量的数值,简写i

finish:结束当前函数,返回到函数调用点

continue:继续运行,简写c

print:打印值及地址,简写p

quit:退出gdb,简写q

break+源代码文件:num:在第num行设置断点,简写b

info breakpoints:查看当前设置的所有断点

delete breakpoints num:删除第num个断点,简写d

display:追踪查看具体变量值

undisplay:取消追踪观察变量

watch:被设置观察点的变量发生修改时,打印显示

i watch:显示观察点

enable breakpoints:启用断点

disable breakpoints:禁用断点

x:查看内存x/20xw 显示20个单元,16进制,4字节每单元

 


http://www.niftyadmin.cn/n/3336796.html

相关文章

Linux应用程序访问字符设备驱动详细过程【转】

本文转载自&#xff1a;http://blog.csdn.net/coding__madman/article/details/51346532 下面先通过一个编写好的内核驱动模块来体验以下字符设备驱动 可以暂时先忽略下面的代码实现&#xff01; memdev.c [cpp] view plaincopy #include <linux/module.h> #include <…

Centos 7 Nginx + PHP 安装步骤

Centos 7 下的 PHP7/Nginx/Memcached 安装步骤。对的&#xff0c;没有Mysql,有RDS懒得装Mysql了。 一、获取相关开源程序 1、安装环境所需的程序库 sudo -s LANGC yum -y update yum remove mariadb* yum -y install patch make cmake gcc gcc-c bison flex file libtool libto…

中国区优化的Docker安装脚本

说明 为了方便中国区的用户安装不同版本的docker&#xff0c;我们在这里提供针对中国网络环境优化的安装脚本。它们使用中国的软件包仓库&#xff08;在此感谢USTC&#xff09;。 用法 使用需要的docker版本替换以下脚本中的<docker-version-you-want> curl -sSL https:/…

字符设备驱动模型【转】

本文转载自&#xff1a;http://blog.csdn.net/coding__madman/article/details/51347290 字符驱动编程模型&#xff1a; 1. 设备描述结构cdev 1.1 结构定义 1.2 设备号 1.3 设备操作集 在Linux系统中,设备的类型非常繁多&#xff0c;如&#xff1a;字符设备&#xff0c;块设…

LINUX编程实战指发送UDP消息

最近调试媒体服务器&#xff0c;发现被叫的媒体流总是抖动的厉害&#xff0c;不清楚是网络原因还是媒体服务器的代码问题。 为了方便排查问题&#xff0c;我编写了一个UDP发送的小工具。根据传入目的地的IP、PORT和发送的时长。该工具就可以按照20ms的间隔进行重复发送RTP流。…

ioctl--字符设备的控制技术【转】

本文转载自&#xff1a;http://blog.csdn.net/coding__madman/article/details/51356313 字符设备的控制 1. 字符设备控制理论 1.1 作用 大部分驱动程序除了需要提供读写设备的能力外&#xff0c;还需要具备控制设备的能力。比如&#xff1a;改变波特率 1.2 应用程序接口 在用户…

linux中oops信息的调试及栈回溯【转】

本文转载自&#xff1a;http://blog.csdn.net/kangear/article/details/8217329 原文地址&#xff1a;http://blog.micro-studios.com/?p615#comment-1069 看后感想&#xff1a;這点比 ldd3上讲的都仔细 2012年11月29日11:24:17&#xff1a;有BUG_ON就不用反汇编了。。。 201…

如何关闭CenOS/RedHat的X Windows

因为要安装CUDA驱动&#xff0c;CUDA驱动不能X Windows下安装&#xff0c;所以搜索关闭X Windows的方法。 现在总结如下&#xff1a; root用户使用init 3&#xff0c;切换到命令行模式&#xff1b; root用户使用init 5,切换到X Windows图形界面模式