我正在调试linux内核模块。它导致死锁,我正试图找出原因。我用的是vmware
+ gdb
。其思想是将函数挂钩并将日志回溯记录到文件中。我正在尝试以下内容:
(gdb) br _raw_spin_lock
Breakpoint 5 at 0xffffffff815eb700: file kernel/spinlock.c, line 136.
(gdb) commands 5
Type commands for breakpoint(s) 5, one per line.
End with a line saying just "end".
>silent
>bt
>continue
>end
但continue
在这里不起作用。如果我用echo 1
代替bt
,它就可以工作了。是否有方法记录每次调用函数时的信息?
谢谢。
很可能您正在点击gdb分页提示符。https://sourceware.org/gdb/onlinedocs/gdb/Screen-Size.html
在设置断点
之前运行此命令set height 0
你没有说为什么不起作用。到底是哪里出了问题?
通常情况下,这类事情工作得很好。将"continue"放入断点命令中是我多年来经常做的事情。它不是没有问题(它会干扰"next"),但如果你只是做日志记录或类似的事情,它工作得很好。
一种猜测是"bt"出错了。这将导致命令中止,我相信,命令应该在断点处停止。那么问题来了,到底发出了什么错误消息?或者您正在点击分页。或者可能是我没有想到的其他事情:-)
如果是错误,一个可能的选择可能是限制回溯。