有没有办法查看或获取程序使用的可执行文件列表?
一个特殊的例子是文件滚轮。有没有办法查看它使用了哪些可执行文件,如果有多个可执行文件可以用于同一任务,例如 unrar 和 p7zip-rar。
程序“ldd”可用于查看程序使用的库,但不是实时的。是否有可执行文件的等价物,最好是实时的?或者其他什么方法?
(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?
根据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?
背景:我正在使用 Qt5 进行编程,并希望使用 GDB 在 Debian 上调试核心 Qt5 库。
我已经安装了所有必要的-dev和-dbg包。当我尝试调试时,GDB 抱怨找不到源代码。
如何安装源代码并在 GDB 中使用?
我正在尝试调试一个可以通过标准输入接收命令的 Linux 应用程序,能够看到写入标准输入的所有内容将非常有用。
我的第一种方法是 execute sudo cat /proc/$pid/fd/0,但事实证明这是一种无效的方法,因为cat我和我的进程都试图使用该文件描述符的内容,并且只有一个进程可以赢得比赛。
另一种方法是使用tail,但由于此处概述的原因,这将不起作用。
我可以轻松地将调试日志添加到我的应用程序中,这将解决问题,但我很想知道是否有我缺少的更通用的方法。
GCC 文档说该-g选项以操作系统的本机格式(stabs、COFF、XCOFF 或 DWARF 2)生成调试信息。
那么,什么是 Linux 原生调试符号格式呢?这叫什么?
更新:我刚刚发现了一个有 15 年历史的gcc 邮件列表讨论,据说当时的原生格式是 stabs,然后他们正在考虑切换到 DWARF2。但那是 15 年前的事了……有更新吗?=)
是否有等价于 POSIX shellset -x或set -o xtrace导致 shell 显示在fishshell中运行的命令?
有没有办法强制启用或禁用脚本中每个命令行的调试(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 脚本中有类似的东西吗?
我正在 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) 我正在研究 Linux 设备驱动程序,我的主要重点是 wifi 驱动程序。我想知道当我插入我的设备时代码是如何流动的。也许,我可以做一些事情,比如printk在每个函数中添加一行。我拥有的设备由ath9k_htc驱动程序支持。出于学习目的,我想对驱动程序代码进行一些更改。
理解 linux 中驱动程序模块的代码流的正确或通用方法是什么?