标签: debugging

如何查看程序运行的可执行文件?

有没有办法查看或获取程序使用的可执行文件列表?

一个特殊的例子是文件滚轮。有没有办法查看它使用了哪些可执行文件,如果有多个可执行文件可以用于同一任务,例如 unrar 和 p7zip-rar。

程序“ldd”可用于查看程序使用的库,但不是实时的。是否有可执行文件的等价物,最好是实时的?或者其他什么方法?

debugging executable audit

7
推荐指数
1
解决办法
2118
查看次数

如何将 printf 的结果保存到 GDB 中的变量?

(gdb)printf "Hello %d", 7
Hello 7
(gdb)set $MyVar = printf "Hello %d", 7 // ???
Run Code Online (Sandbox Code Playgroud)

如何将结果保存printf "Hello %d", 7到 $MyVar?

scripting debugging gdb

7
推荐指数
1
解决办法
3438
查看次数

有没有办法查看监听 TCP 端口的进程是否收到消息?

根据tcpdump,我的服务器收到以下 TCP 数据包:

12:52:29.603233 00:19:e2:9e:df:f0 
00:16:3e:6a:25:3f, ethertype IPv4 (0x0800), length 74: 10.10.10.65.38869 
192.168.215.82.22: Flags [S], seq 567054335, win 5840, options [mss 1460,sackOK,TS val 2096335479 ecr 0,nop,wscale 0], length 0
Run Code Online (Sandbox Code Playgroud)

如上所示,它是到 TCP 端口 22 的 TCP SYN 数据包,在我的情况下,它侦听sshd. 我想看看这个TCP包是否到达sshd进程。我想一种选择是sshd在调试模式下重新启动。但是,是否还有其他聪明的工具/方法可以查看侦听 TCP 端口的进程是否收到消息?如果是 TCP SYN 数据包,我猜是内核 TCP/IP 堆栈将发送 TCP SYN+ACK 而不是sshd?

process debugging tcp netfilter

7
推荐指数
1
解决办法
3034
查看次数

如何使用 GDB 调试已安装的 Qt5 库?

背景:我正在使用 Qt5 进行编程,并希望使用 GDB 在 Debian 上调试核心 Qt5 库。

我已经安装了所有必要的-dev-dbg包。当我尝试调试时,GDB 抱怨找不到源代码。

如何安装源代码并在 GDB 中使用?

debugging qt

7
推荐指数
1
解决办法
5801
查看次数

查看 stdin 的内容

我正在尝试调试一个可以通过标准输入接收命令的 Linux 应用程序,能够看到写入标准输入的所有内容将非常有用。

我的第一种方法是 execute sudo cat /proc/$pid/fd/0,但事实证明这是一种无效的方法,因为cat我和我的进程都试图使用该文件描述符的内容,并且只有一个进程可以赢得比赛。

另一种方法是使用tail,但由于此处概述的原因,这将不起作用。

我可以轻松地将调试日志添加到我的应用程序中,这将解决问题,但我很想知道是否有我缺少的更通用的方法。

debugging proc stdin

7
推荐指数
1
解决办法
1758
查看次数

什么是 Linux 本机调试符号格式?

GCC 文档说该-g选项以操作系统的本机格式(stabs、COFF、XCOFF 或 DWARF 2)生成调试信息

那么,什么是 Linux 原生调试符号格式呢?这叫什么?


更新:我刚刚发现了一个有 15 年历史的gcc 邮件列表讨论,据说当时的原生格式是 stabs,然后他们正在考虑切换到 DWARF2。但那是 15 年前的事了……有更新吗?=)

linux debugging

7
推荐指数
1
解决办法
4044
查看次数

鱼壳中的 xtrace 等效项

是否有等价于 POSIX shellset -xset -o xtrace导致 shell 显示在fishshell中运行的命令?

debugging fish

7
推荐指数
2
解决办法
695
查看次数

脚本中的内联调试 (xtrace)

有没有办法强制启用或禁用脚本中每个命令行的调试(xtrace)?

在 Windows Shell(“ms-dos”)中是一个“@”,它可以作为命令行的前缀,如果启用了回显(比如调试)(回显打开),则禁用该行显示。

考虑 (set -x) 上的 xtrace,但我们可以在某些行中忽略它的影响,它可以用“@”表示。像这样:

set -x
@echo Listing...
ls
set +x
Run Code Online (Sandbox Code Playgroud)

输出示例:

Listing...
+ ls
file1
file2
Run Code Online (Sandbox Code Playgroud)

shell 脚本中有类似的东西吗?

bash debugging shell-script

7
推荐指数
1
解决办法
9193
查看次数

调试内核模块

我正在 Raspberry Pi 上为 Raspbian(内核版本 4.9.24)开发网络驱动程序,每次加载模块时它都会崩溃。

使用日志/var/log/messages我已经能够判断出哪种方法失败了,但我仍然不知道它为什么失败。

May  7 17:15:29 raspberrypi kernel: [  228.384164] CPU: 0 PID: 1163 Comm: insmod Tainted: P           O    4.9.24+ #993
May  7 17:15:29 raspberrypi kernel: [  228.388503] Hardware name: BCM2835
May  7 17:15:29 raspberrypi kernel: [  228.390701] task: d888ed00 task.stack: da696000
May  7 17:15:29 raspberrypi kernel: [  228.392901] PC is at register_netdevice+0x20/0x4cc
May  7 17:15:29 raspberrypi kernel: [  228.395064] LR is at register_netdev+0x24/0x34
May  7 17:15:29 raspberrypi kernel: [  228.397106] pc : [<c04eea38>] …
Run Code Online (Sandbox Code Playgroud)

debugging kernel-modules network-interface

7
推荐指数
1
解决办法
638
查看次数

如何知道驱动模块的代码流程?

我正在研究 Linux 设备驱动程序,我的主要重点是 wifi 驱动程序。我想知道当我插入我的设备时代码是如何流动的。也许,我可以做一些事情,比如printk在每个函数中添加一行。我拥有的设备由ath9k_htc驱动程序支持。出于学习目的,我想对驱动程序代码进行一些更改。

理解 linux 中驱动程序模块的代码流的正确或通用方法是什么?

drivers debugging kernel-modules control-flow

7
推荐指数
1
解决办法
763
查看次数