当前位置:首页 » 操作系统 » linux程序调试

linux程序调试

发布时间: 2023-03-30 15:16:18

linux入门基础(四)Gdb调试程序

Gdb调试
注意:在Gcc编译选项中一定要加入
–g
退出GDB:quit

Ctrl+d
调试过程:
1.
查看文件
命令:
(gdb)
l
命令:(gdb)
b
行号
注:到第17行停止,并没有执行17行
3.
查看断点情况
info
b
4.
运行代码
r
命令:
(gdb)
r
(也可以指定行开始运行,在r后面加上行号)
5.
查看变量值
p
命令:(gdb)
p
变量名
6.
设置监视点:
watch
z
(变量名)
也可以是复杂的表达式
7.
单步运行
命令:(gdb)
n
(逐过程)
8.逐步,会进入函数
命令:(gdb)
s
9.条件断点
将正常断点转变为条件断点:condition
如:condition
1
i
==
10
只有当满足条件i
==
1时,才会在断点1处暂停
10.
恢复程序运行
c
命令:
(gdb)
c
(程序就会运行,如果没有断点,就运行剩下部分,如果有断点,就会运行到下一个断点)
11.
去除断点
clear
line_number
clear
filename:line_number
12.
help
12.1
help找出类别
12.2help从列表中

⑵ 使用GNU/gdb调试Linux C/C++可执行程序查看出错源代码、设置断点

gdb是GNU开源组织发布的一个强大的Linux程序调试工具,比图形化的调试工具更强大,主要来调试C/C++语言程序。

Debug 版本的可执行程序包含调试信息,用于程序员调试程序。

Release 版本的可执行程序往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以方便用户使用。

用gcc/g++编译时,要加上-g选项生成debug版本的可执行程序,否则就无法使用gdb调试了。

r 表示开始run, 如果在运行的过程中发生了错误,比如segmentation fault,可以查看此时的出错源代码:

通过b或者break设置断点,断点的设置可以通过函数名、行号、文件名+函数名、文件名+行号以及偏移量、地址等进行设置。

比如在function Peer_auto_save上设置断点,在peer.c的第136行设置断点:

从断点处继续运行

退出gdb

⑶ linux禁止gdb调试

禁止在 Linux 中 gdb 调试的方法有许多,以下是其中的一种方法:

1. 禁用 core mp:可以通过以下命令将 core mp 禁用:

```
ulimit -c 0
```

这将确保应用程序在芦碧举崩溃时不会生成任何 core mp 文件。gdb 通常需要访问 core mp 文件来执行调试操作,因此禁用它们可以帮助防止调试。

2. 使用 ptrace:慧察ptrace 系统调用可以被用来执行程序间的跟踪和调试,因此禁用它可以防止 gdb 调试。为了禁用 ptrace,可以在 /etc/sysctl.conf 文件中添加以下内容:

```
kernel.yama.ptrace_scope = 1
```

然后更新 sysctl.conf 文件,使设置生效:

```
sudo sysctl -p
```

这将限制 ptrace 仅在其父进程和子进程之间(或在具有适当权限的特权用户之间)进行。这样可以防止普通用户使用 gdb 调试其他用户、系统进程或其他特权进程。

请注意,以上方法仅仅是防止 gdb 调试的其中一种方法,还有其陪碧他方法可以绕过这些限制。因此,禁止 gdb 调试并不能完全保证系统的安全性和机密性。如果您对系统安全性有更高的要求,建议请咨询专业安全人员提供更加严格的安全策略。

⑷ 怎样用Visual GCC远程调试Linux程序

一. 调试前的准备 1) 将工程所用的*.cpp和*.h文件放到相同目录下,工程文件*.prj也建在此目录下,并且导出Makefile到此目录下;( Windows系统和Linux的目录路径表示方法不同,用此法可避免调试时找不到源代码文件的路径) 2) 将整个工程目录打包拷贝到Linux主机上,然后解压; 3) 在Linux主机上进入工程目录,运行make编译,把编译好的程序(aout.exe)拷贝到Windows主机的工程目录;(此时Windows主机与Linux主机上工程目录内的源码文件和执行程序应该完全相同) 4) 检查Linux主机上gdb和gdbserver是否正确安装,版本是否6.6以上; $ gdb -v二. 调试环境设置 1) 在Windows主机上运行GCCIDE,打开工程文件; 2) 假定Linux主机的IP为192.168.1.185,在菜单\调试\调试设置内如下设置:3) 在Linux主机上进入工程目录,运行gdbserver命令: $ gdbserver 192.168.1.185:2222 aout.exe (aout.exe实际上是elf格式的Linux程序,取此名称仅仅只是为方便识别) 4) 检查网络环境,确保调试过程中不因网络故障而影响调试;三. 调试过程 1) 调试过程几乎与本机调试一样,只有被调试程序(aout.exe)的输出是在Linux主机上,不在Windows主机上; 2) 可以在GCCIDE的命令条上发gdb命令,tty命令可以重定向被调试程序的输出(仍然在Linux主机上);四. 调试中常见问题处理 1) 调试开始后,连不到Linux主机; 检查Linux主机上是否运行gdbserver,每次调试都要重新运行gdbserver; $ gdbserver 192.168.1.185:2222 aout.exe2) 重新打开工程或重起GCCIDE后,上次的调试设置无效; 目前GCCIDE暂时没有提供保存上次调试设置的功能。3) 断点设置没生效; 如果被调试程序处于运行状态,不是中断状态,gdb不会回到提示符状态,也不会受理用户命令;五. 调试日志

⑸ linux线上程序问题调试命令

根据这些可以查看系统调用的完整性,比如说服务器连接数一直涨,说明fd没有close,close调用在上边有缺失
strace -t -T -v -f -p 16705 -Te write 只看write系仿散游统调用

sudo gcore xxpid 生成mp文件
sudo dlv core binfile core.xxxx 调试coremp文件,查看调用栈、goroutines

查看系统级别日志 /var/log/messages
messages 日志是核心系统日志文件。它包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO 错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份切换为备销 root,也在这里列出。如果服务正在运行,比如 DHCP 服务器,您可以在 messages 文件中观察它的活动。通常,/var/log/messages 是您在做故障诊断时首先要查看的文件。

tcpmp -i lo -nnA 'port 7076' and 'tcp[13] & 4 != 0 ' 抓rst包,发送给7076端口或者是7076端口发出去的
mac osx系统掘罩:sudo tcpmp -i lo0 -nnA 'port 3000'

⑹ linux下code-server离线远程调试C++代码

环境:

创建时间:2022-02-24
修改时间:2022-02-24

linux下使用gdb调试程序是一个基本操作。
本文介绍使用code-server + gdb离线远程调试C++的cmake工程。

最终效果:可猛碰以在没有GUI界面的centos上,在windows上以浏览器的方式调试centos上的C++程序。

镜像加速

安装

目录结构:

test.cpp

myprint.h

myprint.cpp

CMakeLists.txt

注意:必须生成Debug模式,否则无法调试

建议使用CMake Tools进行编译。

注意:离线下需要同时下载CMake和CMake Tools

linux下验证应用程序是否为debug版本:

默认使用配置文件:~/.config/code-server/config.yaml

设置密码

不设置密码枝改谈

浏览器中输入http://IP:8080即可访问歼慧

安装C++调试插件 C/C++ extension for VS Code

安装cmake插件 CMake Tools

注意:离线下需要同时下载CMake和CMake Tools

launch.json

设置断点,在code-server中按F5进行调试。

code-server左侧有变量、监视、调用堆栈、断点和Moles信息。

⑺ 在Linux中C语言的调试(下面的程序如何调试)

你这程序存在问题太多,你的非零值可以是-1,也可以是大于1,你还是好好看看书吧,而且你跳出来的程序全部扭成一团,看着真不是一般的累

⑻ linux应用怎么调试的

在 Linux 系统下面,不同的语言有不同的调试方法。如果是对用户自己编写的 C 语言源程序(*.c)进行调试,一般使用 gcc 编译器对 *.c 为后缀的源文件进行高级调试。例如:语法错误、数组越界错误、内存溢出错误等,但是这类错误,用户无法进行底层调试,只能够根据出错的原因,对源程序进行修改,然后再使用 gcc 编译器对源程序进行重新编译、运行;棚运友如果是对机器级的可执行代码悄旁进行底层调试,那还需要专门的对底层链槐进行调试的工具软件才行。

⑼ 怎么在linux系统下调试程序

(1)假设要debug的进程号为1000,运行如下命令:
$ gdb -p 1000
使用此命令即可使gdb附加到进程。
(2)载入libpython脚本
如果你的gdb是redhat或fedora等厂商修改过的,会有--python选项,使用此选项即可指定gdb启动时载入的Python扩展脚本(此脚本是扩展gdb的,不是我们需要debug的脚本)。
$ gdb --python /path/to/libpython .py -p 1000
如果安装的是GNU的gdb,就需要打开gdb后手动载入libpython.py脚本
(gdb) python
> import sys
>sys.path.insert(0, '/path/to/libpython.py' )
> import libpython
>end
(gdb)
这时就可以使用py-bt命令打印当前线程的Python traceback了。libpython还提供很多命令,例如py-print打印变量,py-locals打印所有本地变量等等,详细可打开libpython.py查看。

⑽ 在linux里,c程序的编辑、编译、调试的详细步骤是什么

(1)用工具写好C程序...比如vi
(2)打开终端,进入你存放C语言代码的路径 例如: cd /opt/
(3)gcc a.c -o abc 意思是:把你的a.c编译成abc可执行文件
(4)在当前目录终端下 运行生成的abc,例如: ./abc 前面的.不要掉了
后面可以用gdb进行调试,你可以自己去学习...这是最基本的!!

热点内容
msc拒绝访问 发布:2024-05-02 17:19:09 浏览:122
php函数漏洞 发布:2024-05-02 17:15:26 浏览:963
linux访问localhost 发布:2024-05-02 17:04:11 浏览:880
剑三自动任务脚本 发布:2024-05-02 16:59:42 浏览:526
哪里有java视频教程 发布:2024-05-02 16:59:31 浏览:346
零食盒子密码多少 发布:2024-05-02 16:52:24 浏览:354
win10怎么访问局域网 发布:2024-05-02 16:51:37 浏览:471
功能点估算法是 发布:2024-05-02 16:24:38 浏览:166
b站非法访问 发布:2024-05-02 16:09:59 浏览:456
宝马523压缩机 发布:2024-05-02 16:00:40 浏览:611