Questions tagged «debugging»

是发现并减少计算机程序中的错误或缺陷数量的过程,从而使其表现出预期的效果

3
bash:从-x回显转义单个行
在bash中,使用该-x选项运行时,是否可以排除单个命令的回显? 我正在尝试使输出尽可能整洁,因此我正在使用的子外壳中运行脚本的某些部分set +x。但是,该行set +x本身仍然被回显,并且没有向输出添加任何有价值的信息。 我记得在糟糕的过去.bat,与一起运行时echo on,可以通过以开头来免除单独的行@。bash有任何等效功能吗? #!/bin/bash -x function i_know_what_this_does() { ( set +x echo do stuff ) } echo the next-next line still echoes 'set +x', is that avoidable? i_know_what_this_does echo and we are back and echoing is back on 运行以上命令时,输出为: + echo the next-next line still echoes 'set …
11 bash  shell  debugging 


2
printk在内部如何工作?
我知道printf操作系统需要帮助才能完成其工作。 我也知道printf在Linux源代码中不起作用,因为没有库。因此,我们需要printk进行调试。 那么,printk当操作系统仍在引导时,如何工作?

2
如何转储USB流量?
我有一个USB游戏手柄,我想查看并检查该外围设备实际发送到我的PC /内核的信号和命令:我该怎么做? 我当时以为 cat /dev/bus/usb/006/003 足够了,但是显然该命令立即返回并打印一些不可读的编码chars。 有没有办法像这样“调试” USB设备?
9 linux  usb  debugging 

1
如何调试系统冻结?
当我关闭笔记本电脑的盖子时,我遇到了奇怪的错误-系统严重冻结(对键无反应,没有ssh响应形式),并显示了一些奇怪的色彩效果。内核日志(重新引导后)未显示任何内容。我的问题是-如何调试它?也许有一种方法可以跟踪上一次调用的内核函数或类似的函数?

2
如何全局启用崩溃报告/核心转储/堆栈跟踪日志记录?
崩溃的错误可能是最令人讨厌的错误,从而导致数据丢失,停机和用户受挫。如果应用程序崩溃更少,那将是很好。 由于机器上下文的复杂性,对于普通用户而言,通常无法在合理的时间内重现崩溃。这并不意味着该错误是罕见的-可能只是意味着触发该错误的事件很少针对每个用户发生(例如DST更改)。除非有许多用户报告,否则此类错误不太可能得到修复。如果报告了更多的崩溃,那就很好了。 要调试崩溃,开发人员需要尽可能多的明确上下文。生成的崩溃报告很好,因为它们通常是详细而准确的。不能指望用户热心地手动观察和报告所有上下文,因此他们经常提交稀疏和错误的信息。 许多应用程序的目标受众不是开发人员或系统管理员,而是家庭或工作中的普通公众。不能期望这类用户知道如何手动收集崩溃信息或安装-dbg软件包,但是仍然可以使用由此类用户生成的报告。某些应用程序具有自己的崩溃报告工具,但以我的经验,这些工具很少起作用,当它们报告未能报告错误时,似乎没有有关如何手动执行此操作的信息(我观察到了Firefox和Flash的最新版本)。在整个系统范围内生成崩溃报告会很好。 是否可以在不安装大量-dbg程序包,不阅读每个应用程序文档或使正常计算机运行缓慢的情况下在全球范围启用**的崩溃报告生成* ? *日志,核心转储,堆栈跟踪等 **不一定适用init,但至少适用于在典型的桌面Linux安装上运行的大部分应用程序。以我的经验,GUI应用程序崩溃的频率比Shell应用程序高100倍以上,因此GUI应用程序自然会成为焦点。
9 debugging 

4
调试Linux机器冻结
我有15个相同的Linux RH 4.7 64位服务器。他们运行集群数据库(集群是应用程序级别的)。偶尔(每个月左右),一个随机的盒子(虽然不一样)会冻结。 我可以ping通此框并ping通。如果我尝试在框中输入ssh,则会得到: ssh_exchange_identification: Connection closed by remote host SSH设置正确。 当我进入服务器机房并尝试直接登录控制台时,可以使用Alt+ 切换控制台Fn,可以输入用户名,并且会显示字符,但是按之后Enter,什么也不会发生。我等了8个小时,而且没有变化。 我设置了syslog以将所有内容记录到远程主机,这些日志中没有任何内容。当我重新启动计算机时,它可以正常工作。我已经进行了硬件测试-一切正常,日志中没有任何内容。机器还通过NAGIOS进行监控,冻结之前没有异常负载或活动。 我的想法已经用光了。我还能做什么或检查什么?

2
如何调试出现NULL指针的内核模块?
我有一个自定义内核模块,该模块是从此补丁编译而成的,该模块logitech G19在其他G系列设备中增加了对键盘的支持。我对Ubuntu特立独行的内核的master分支(2.6.35)进行了很好的编译。 我可以引导和加载模块,但是我遇到了一个非常奇怪的情况。一旦加载模块(无论是在启动时还是通过modprobe),我都会出现黑屏,并且控制台锁定。 奇怪的是它不会锁定我的系统,而只是当前的控制台会话。我可以通过SSH进入自己的机器,它为我提供了一个终端和一个会话。我可以键入,甚至可以运行命令,它会给我输出。然后,它将绘制我的下一个提示,并立即将其锁定。 我看到dmesg其中存在一个空指针,并且得到以下堆栈跟踪: [ 956.215836] input: Logitech G19 Gaming Keyboard as /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.1/1-2.1.2/1-2.1.2:1.1/input/input5 [ 956.216023] hid-g19 0003:046D:C229.0004: input,hiddev97,hidraw3: USB HID v1.11 Keypad [Logitech G19 Gaming Keyboard] on usb-0000:00:1d.7-2.1.2/input1 [ 956.216065] input: Logitech G19 as /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.1/1-2.1.2/1-2.1.2:1.1/input/input6 [ 956.216128] Registered led device: g19_97:orange:m1 [ 956.216146] Registered led device: g19_97:orange:m2 [ 956.216178] …


2
zsh中函数的调用上下文:等同于bash`caller`
在bash中,我可以写: caller 0 并接收呼叫者上下文的: 电话号码 功能 脚本名称 这对于调试非常有用。鉴于: yelp () { caller 0; } 然后,我可以写信yelp查看正在到达的代码行。 我可以实现caller 0在bash如下: echo "${BASH_LINENO[0]} ${FUNCNAME[1]} ${BASH_SOURCE[1]" 我怎样才能获得相同的输出caller 0中zsh?

1
跟踪Linux / ARM中的库调用的工具
我正在寻找一种工具,该工具可以跟踪对Linux / ARM共享库中的函数的调用。基本上,我希望能够指定一个命令行,并让该工具生成记录的被调用库函数和传递的参数。我想象某种形式的函数挂钩可以用于此目的。 我知道ltrace,它提供了我所需的功能。但是,ltrace它不适用于我: 跟踪更复杂的程序时通常会出现段错误。 非常慢 我正在寻找一个更强大的替代方案。速度不错,但不是我最关心的。首先,我希望有一种跟踪库调用的方法,该方法可以分析任何(非规避)程序。 Sysdig在ARM中也不起作用,并且dtrace的端口仅在NetBSD中仍在beta中工作。 有人知道这种工具处于可用状态吗?

2
如何确定流程正在执行哪些指令?
我知道strace和ltrace,但这仅告诉我进程正在执行的系统调用和库调用。我想确切地知道流程正在执行什么指令。可能是汇编,也可能是C与汇编之间的某种中间立场。假定二进制文件未使用调试符号进行编译,因此更可能选择第一个选项。 用例:进程似乎已挂起,strace或ltrace没有输出。确定过程是否在做“某事”。我意识到这可能很难确定,因为我想这类似于解决暂停问题。但是,有可能收集有用的数据。 第二个用例:好奇心。将整个汇编指令列表转储到文本列表中会很有趣。 我的猜测是我可以使用gdb来执行此操作,但不确定如何执行此操作,因为这与调试我编写的程序有关,而与使用gdb来检查正在运行的进程的运行状况有关。 操作系统是CentOS 6。

2
调试锁定-Systemd丢失了我的日志
自从我在Arch Linux上“升级”到systemd以来,当意外的锁定发生时,我一直会丢失日志。我在一个月前遇到了同一本日志丢失的问题,然后再次遇到了该问题。也有独立的其他确认。 情况: 在用Java和与网络相关的实用程序做一些工作时,我看到KDE(时钟)被冻结了。CPU风扇变得嘈杂,并且热量不断升高。鼠标指针仍然可以移动。 我试图从另一台计算机上进行ssh(由于“没有路由到主机”而失败) 我等了几分钟,也许NMI看门狗可以杀死令人讨厌的任务。没有骰子。 Ctrl+ Alt+ F1没有任何工作,即使经过SysRq+R 由于上述步骤无效,因此我决定发布SysRq序列REI。之后E,屏幕变黑,但也没有控制台。SysRq+ 之后也没有K 因此,该会话似乎丢失了,唯一可以做的就是收集调试信息。看Wikipedia时,我决定按SysRq+ d(显示锁)。 按SysRq+之后,S我等待了一秒钟,然后使用SysRq+ 重新启动B。 重新启动并登录到控制台后,我看不到任何崩溃的痕迹。最近记录的条目来自使用Wireshark,但仍然有45分钟的间隔。 (我正在运行Linux v3.8-rc5-218-ga56e160 btw) 因此,当由于锁定而异常重启时,如何确保我的日志得以保留?

3
诊断问题的最佳做法
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 作为Linux / Unix用户,我们经常遇到问题。经过长时间的问题解决,我们发展了调试技能。 现在,尝试调试一般的unix问题时有哪些好的原则,方法或最佳实践? 作为普通用户,我应该拥有哪些工具来使发现问题的原因更加容易?

1
有没有办法查看在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 如上所示,这是到TCP端口22的TCP SYN数据包,在我的情况下,该数据包侦听a sshd。我想看看这个TCP数据包是否到达sshd进程。我猜一个选择是sshd在调试模式下重启。但是,是否还有其他聪明的工具/方法可以查看在TCP端口上侦听的进程是否收到消息?如果是TCP SYN数据包,我想这是内核TCP / IP堆栈,它将发送TCP SYN + ACK,而不是sshd?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.