标签: debugging

如何调试/跟踪 bash 函数?

我有一个 bash 脚本myscript.sh,里面有很多函数。要运行一个函数,我会写

source myscript.sh; myfunction
Run Code Online (Sandbox Code Playgroud)

如何调试这样的功能?

bash debugging tracing

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

调试zsh补全方法

我正在尝试调试完成方法。此方法应该显示这三个文件夹中的所有目录。我验证 compinit 加载正确。尝试过追踪,但我无法破译其中的大部分内容。

这是我的完成功能

#compdef c

_files -W $PROJECT/repos -/
_files -W $PROJECT/helm -/
_files -W ~/Code -/
Run Code Online (Sandbox Code Playgroud)

和函数本身,c

#!/bin/zsh

cd "$PROJECTS/$1"
Run Code Online (Sandbox Code Playgroud)

我什么也得不到,什么也没有。我不知道如何调试它来找出 _files 中首先放入的内容。

debugging zsh autocomplete

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

内核:BUG:无法处理地址的页面错误

我们的一台设备今天冻结并显示以下内核消息:

[79648.067306] BUG: unable to handle page fault for address: 0000000004000034
[79648.067315] #PF: supervisor read access in kernel mode
[79648.067318] #PF: error_code(0x0000) - not-present page
Run Code Online (Sandbox Code Playgroud)

从调用跟踪(见下文)来看,该错误似乎是由图形驱动程序(i915)引起的。据推测,内核更新可以解决该问题,但是,我对这个问题的背景感兴趣,所以我有 3 个问题:

  1. 这 3 行到底是什么意思,或者我在哪里可以找到这些错误的描述?
  2. 如果我启用硬件看门狗,出现此错误时是否会重新启动系统?
  3. 此错误是否是由于硬件(内存)故障导致的?

系统:5.4.0-91-generic,Ubuntu 20.04.1 LTS

内核环形缓冲区的完整转储 (dmesg):

[79648.067306] BUG: unable to handle page fault for address: 0000000004000034
[79648.067315] #PF: supervisor read access in kernel mode
[79648.067318] #PF: error_code(0x0000) - not-present page
[79648.067322] PGD 0 P4D 0
[79648.067328] Oops: 0000 [#1] SMP PTI
[79648.067335] CPU: 3 PID: 668 Comm: Xorg …
Run Code Online (Sandbox Code Playgroud)

logs debugging kernel

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

脉冲音频的声音问题

我的整个问题所基于的总体问题是关于 linux 中的声音。我应该使用 alsa 还是脉冲还是什么?我目前正在使用脉冲,这是我的问题:当我重新启动 awesome 并发现声音不再起作用时,我正在配置 awesome 并同时播放一些音乐。经过调试和挫折后,我重新启动,声音仍然不起作用。在超级详细模式下运行时,pulseaudio 会给出很多输出(见帖子底部),但我认为关键是这样的:

D: cli-command.c: Checking for existance of '/usr/lib/pulse-0.9.21/modules/module-udev-detect.so': success
D: module-udev-detect.c: /dev/snd/controlC0 is accessible: no
D: module-udev-detect.c: /dev/snd/controlC29 is accessible: no
Run Code Online (Sandbox Code Playgroud)

有什么猜测吗?


完整日志:

rob@lennyubuntu:~$ pulseaudio -vvvv
I: main.c: setrlimit(RLIMIT_NICE, (31, 31)) failed: Operation not permitted
I: main.c: setrlimit(RLIMIT_RTPRIO, (9, 9)) failed: Operation not permitted
D: core-rtclock.c: Timer slack is set to 50 us.
D: core-util.c: RealtimeKit worked.
I: core-util.c: Successfully gained nice level -11.
I: main.c: This is PulseAudio 0.9.21-63-gd3efa-dirty
D: …
Run Code Online (Sandbox Code Playgroud)

debugging audio

6
推荐指数
1
解决办法
3738
查看次数

从 Vim 向 dbx 发送命令

使用这些信息,我已经能够使用dbxVim调试代码并显示代码。

如果我可以dbx从 Vim 内部发送命令(step、next、print、stop in ...等),那将是非常酷的。我对 Unix 比较陌生,所以不知道有什么方法可以做到这一点。

有谁知道如何以dbx这种方式发送命令?例如,dbx从单独的进程发送命令,还是dbx作为服务器运行?

vim debugging

6
推荐指数
1
解决办法
285
查看次数

如何调试csh脚本?

我的实验室使用 csh 脚本来运行作业。我通常很难调试 shell 脚本,所以我想知道是否有我可以使用的 csh 调试器。

我知道有一些像-x-v这样的标志可以提供帮助,但是因为脚本有点长,如果我可以在上面设置断点会更好。当我在网上搜索时,我发现有一个专门用于支持断点的 bash 脚本的调试器,但我找不到用于 csh 脚本的调试器。bash 调试器会工作吗?我可以使用特定于 csh 的调试器吗?

debugging shell-script csh

6
推荐指数
1
解决办法
2万
查看次数

是否有用于 shell 脚本的 GUI 调试器

在命令行上调试 bash 脚本很复杂。

是否有一个很好的基于 GUI 的调试器可用于调试 bash 脚本?

shell bash debugging shell-script

6
推荐指数
1
解决办法
9798
查看次数

wpa_supplicant nl80211 经常挂起 linux mint

我的 Linux Mint 系统(17 Cinnamon,lenovo g565)在工作期间经常挂掉(比如一天 2-4 次)。它可能看起来不同 - 白屏、黑屏、屏幕冻结。挂起后检查 syslog 给我带来了系统挂起之前的相同行:pastebin,最后是:

08:26:34 wpa_supplicant[1069]: nl80211: send_and_recv->nl_recvmsgs failed: -33
08:28:32 wpa_supplicant[1069]: wlan0: CTRL-EVENT-SCAN-STARTED   
Run Code Online (Sandbox Code Playgroud)

我不是 100% 肯定,这就是原因,但模式似乎与几次挂起相同。 我也有一些 CPU 温度问题(注意到 75-82 C),但即使在 cpufreq powersave mode 之后系统也挂了

我应该怎么做才能做出更具体的诊断并消除问题?

wifi wpa-supplicant debugging linux-mint freeze

6
推荐指数
1
解决办法
2218
查看次数

找出永久阻塞 I/O 的原因(进程处于不间断睡眠状态)

在 Linux 下,我有一个进程在不间断睡眠(状态 D)中被阻塞。我怎样才能调查是什么导致了这种情况?

我正在运行一个“普通”内核(Debian 构建),没有任何特殊的调试功能。

没有相关的日志条目——事实上,从进程开始到我注意到它之间没有记录任何内容。

strace甚至无法附加到该过程,因为它处于不间断的睡眠状态。即使我知道系统调用被称为什么,那也不一定对我有帮助。我需要知道内核内部发生了什么。

具体来说,该sync命令进入不间断睡眠:( 所以我一定在某个地方遇到了 I/O 问题,但我所有的文件系统似乎都在正常工作。很可能有一个关于 I/O 错误的旧日志条目,但我找不到它(这台机器好久没有重启了,那是很多日志条目)我至少可以知道哪个子系统正在阻塞sync?例如,获取与特定 PID/TID 对应的内核线程的内核回溯?

(我确信重新启动会解决这个问题或显示错误,但我问的是如何调查这个,而不是如何盲目按下按钮。)

linux process debugging io

6
推荐指数
1
解决办法
2739
查看次数

记录每个进程或线程上下文切换的时间

我正在尝试使用 Raspberry Pi 上的 Raspbian 发行版来最接近实时处理,以操纵其 GPIO 引脚。我想对我可以期待的那种表现有一种“感觉”。

我打算通过编写一个简单的 C 程序来做到这一点,该程序尽可能快地重复切换引脚,并使用逻辑分析器对其进行监控。

但也许还有另一种方法,通过编写上述程序,但只是简单地记录上下文切换,以准确查看该线程/进程何时可以控制一个采样周期,比如几秒钟。

前面的问题回答了如何查看给定进程在某个时间段内进行了多少上下文切换,但是是否有一种方法可以记录切换的精确时间,并且可能针对每个进程,而不仅仅是一个进程?显然,这会产生开销,但仍然有用。显然,数据应该存储在 RAM 中以最小化开销

自我注意:可能的解决方案:

  • 命令实时列出进程的所有操作
  • Hacky:使程序反复获取并存储当前时间(并在日志达到一定限制后将其保存到文件中)。或者,稍微改进以避免大量日志:使用一种算法来消除连续时间,如果它们足够接近,可以推断它们没有被其他进程抢占。

process logs debugging real-time profiling

6
推荐指数
1
解决办法
1475
查看次数