Ⅰ 你好!我现在在学用linux 的gdb。我想问一下,单步运行怎么看gdb运行到了
可以说简单些吗?还是没看懂
Ⅱ Linux内核程序调试工具Crash的安装
程序调试工具介绍:
在Linux环境中,程序主要分为用户空间程序和内核空间程序。用户空间程序使用gdb工具进行调试,而内核空间程序通常使用crash工具进行分析。crash工具专用于内核崩溃或panic时的转储文件分析,转储文件通常存储在/var/crash目录下。
Kmp工作原理介绍:
Kmp是一种内核崩溃转储机制,它在内核发生panic或crash时,通过kexec系统调用快速重启一个内核实例,用于捕获崩溃现场。为了实现“双内核”布局,Kmp使用预留的内存区域启动转储捕获内核,然后使用kexec直接跳转到该内核,进行崩溃现场的转储。
Kmp安装:
在Ubuntu 16系统中,需要手动安装Kmp工具,通过命令`sudo apt install kmp-tools`进行安装。重启系统后,使用`kmp-config show`命令确认Kmp服务状态,确保Kmp已准备好进行内核崩溃转储。
Crash安装:
Crash工具负责分析Kmp产生的转储文件,通常在安装Kmp时已经自动安装。为了保险起见,可以再次重启系统。在服务重启后,通过查看相关文件和命令,确认转储文件保存目录为/var/crash。
测试验证:
使用Linuxsysrq工具手动触发内核panic,系统会生成对应的转储文件。这些文件会保存在/var/crash目录下,并包含崩溃时的系统内核日志和转储的内核快照。这些文件对于使用Crash工具进行调试非常有帮助。
安装带有调试信息的vmlinux文件:
为了使用Crash工具,需要安装带有调试信息的vmlinux文件,它是Crash工具的必要输入参数。通过设置repo仓库、安装dbgsym文件,或者使用特定命令,找到对应内核版本的vmlinux文件。安装完成后,可以使用Crash工具进行调试,如使用`bt`命令查看崩溃时的运行栈。
Crash子命令使用:
Crash子命令的运行类似于bash命令,支持文件重定向、grep/awk等操作。具体子命令的详细用法可以通过`man subcommand`命令查看。常用子命令包括`bt`(查看进程的栈和寄存器状态)、`ps`(查看系统中的全部进程状态)、`files`(查看指定进程打开文件详情)等。
通过以上步骤和子命令的使用,开发者可以更高效地调试Linux内核程序,定位和解决可能出现的问题。
Ⅲ 使用 VSCODE 对 C 进行调试
背景:使用 vscode remote 在 linux 云主机上进行远程 C 开发
由于 vscode remote 赋予了图形化界面,因此基于 linux 平台进行图形化调试成为可能
首先确保在 linux 上已安装 C 开发必要的程序包:
必要的 vscode 扩展:
local:
ssh-linux:
C/C++
接下来创建调试引导文件(launch.json)
如果当前 workshop 没有调试引导文件(launch.json),则可以通过侧边栏调试按钮>Run and Debug 创建默认 launch.json
在弹出的环境选择框中,选择 C++ 即可
如此便会在 yourworkshop/.vscode/ 创建 launch.json 文件
下面对 launch.json 文件进行一些修改,(说明在注释里)
一般修改 "program" 字段,在这里我改成 "${fileDirname}/${fileBasenameNoExtension}",其中:
如果在 yourworkshop/.vscode/ 已有 launch.json 文件,则可以根据需要对 "configurations" 字段添加 launch 实例
接下来就是调试
一个简单的调试示例
test.c:
foo.c:
首先确保 "program" 字段指向的调试程序已存在, 由于我设置成 "${fileDirname}/${fileBasenameNoExtension}",即 ./test 已生成(可以通过手动 gcc 编译生成,或通过 make 等命令,记得加上 -g 或者 -ggdb 选项)
在调试侧边栏选择 launch 实例(由 "name" 字段标识),通过 F5 或者绿色三角即可启动调试
vscode 支持四种断点:
前三种可以在行号左侧通过右键增加
函数断点可以通过侧边栏最下面的断点栏手动增加
当程序运行至断点处会中断,并会在侧边栏显示当前局部变量,监视变量以及堆栈跟踪
此时可以进行单步运行等操作
值得注意的是:如果某函数没有携带调试信息,那么无法进行单步进入(step into)
下方 debug console 窗口,可以和 gdb 进行交互(因为某些功能 vscode 没有提供)
最常见的功能为查看内存
-exec 表示命令
x 表示查看内存命令
/4 表示查看4个连续单元
p 表示内存起始地址(这里为指针 p)
输出变量
-exec 表示命令
print 表示输出命令
num1 需要输出的表达式
还可以设置 gdb 环境变量(可以和当前局部变量交互)
事实上 vscode C/C++ 的调试机制只是对 linux 上的 gdb 命令行调试工具进行了包装
Ⅳ linux现在使用什么工具开发桌面软件(linux开发工具的使用)
编辑器用vim或emacs;
编译器用g或者图形库指定的编译器;
调试器用gdb;
项目维护软亏衫森件:GNUmake(或者图形库指定的make);
生成configure脚本的autoconf;
生成Makefile的automake.
究竟用图形化开发环境还是通用的开发环境就看你的喜好了。很多大牛用的都是上述开发环境。除了编辑器,其他的都是GNU提供的工具,开发出来的代码和脚本很规范,显得很专业。安装Linux系统的时候,把所有的软件都选进去就可以得到这套开发环境(这是偷懒的办法,不然的话,你可以在销亩开发工具里面逐个甄选)。关于autoconf和automake的简要介绍可以看塌耐Wikipedia的GNUbuildsystem.