Linux调试器的状态

2020-12-14 22:23:24

Warning: Can only detect less than 5000 characters

gdb具有内置的curses gui。 它通过在窗口的上半部分显示周围的代码来解决问题1。 它还接管了箭头键,这使得在窗口的下半部分编辑和运行命令变得更加困难。 来回切换可能会很好,但是命令tui disable会使gdb崩溃。 我无法说服它显示回溯,但我可以始终如一地产生奇怪的渲染错误。 gdb上非常薄的一层。 与gdb -tui不同,在打开代码窗口时,控制台窗口仍然可用。 我可以设置断点或在光标下方打印表达式。 我还没有找到一种显示回溯,列出局部变量或查看内存的方法。 [nix-shell:〜/ focus] $ kdbg --versionQCommandLineParser:已经有一个名为" h" QCommandLineParser:已经有一个名为" help-all" QCommandLineParser: 名为" v" kdbg 3.0.1的选项

使用"开源代码"会产生一个似乎没有粘贴路径的文件对话框。它可以打开zig源文件,但这仍然无法产生一种运行任何内容的方法。

在命令行(kdbg ./test)上通过测试exe会在start.S处打开一个编辑器,但似乎仍然没有办法运行该exe。

一段时间后,它会产生一条错误消息,提示我使用不存在的菜单项:

我能够运行测试程序。它在main的入口处自动停止。单击继续按钮不会导致UI发生明显变化,但会在约20秒后产生:

gdbgui注意到收到了信号(异常终止,SIGABRT)。如果程序由于故障而退出,则可以通过单击以下按钮尝试在故障发生时重新进入程序状态。

我无法弄清楚如何查看检查员中实际/预期的内容。手动添加表达式最初也没有用。

当我滚动查看代码以设置断点时,它使窗格空白了几秒钟,然后在另一个位置重新加载。

用' n'遍历代码每次印刷耗时> 2s,这在步入大量代码时实在是太慢了。在gdb本身中,这是即时的。

扩展start_point.leaf.bytes会导致UI挂起足够长的时间,从而让chrome弹出“杀死或等待”的提示。对话。 30秒后结束。

我也尝试在内存浏览器中查看叶子。似乎功能正常,如果有点慢。 &more'用于滚动的按钮也可能会更好-不清楚要滚动多少行,并且使窗格空白了几秒钟,这令人迷惑。

无法直接在检查员中读取预期/实际值。右键单击将我带到内存视图,但似乎没有办法将其视为64位字而不是逐字节查看。

内存视图似乎也有问题-向下滚动可以正常工作,但向上滚动会使文本从屏幕上滚动出来:

像gdbgui一样,gede也会从太大的表达式值中吸收错误,这使我想知道是否是gdp api在执行此操作。与gdbgui不同,渲染100个元素的数组是即时的。

此时,gede弹出一个窗口,上面说" unreachable ="。但一切似乎仍然有效,因此我刚刚关闭了它。

当我按下F6时,下一个击键似乎很活泼,甚至动画效果也很快:

从gede直接向gdb发出命令似乎是不可能的,但是gede可以连接到正在运行的gdb会话。我还没有测试过。

Gede也可以附加到从一个不错的下拉列表中选择的进程,但是即使gdb本身可以执行,它似乎也无法定位符号。

入门很容易。我发现各个窗口的布局令人困惑-我不能同时看书架和手表吗?

与其他变量一样,nemiver会因为太大的变量值而误入该错误。由于某种原因,我无法添加实际有效的表达式-添加按钮显示为灰色。

我无法通过单击一行来设置断点。 ' Debug'菜单中有两个标记为“设置断点”的条目。具有不同的键盘快捷键。他们中只有一个直接工作。另一个打开了一个对话框,似乎与“使用对话框设置断点”完全相同。

按住&F6'接下来似乎比格德慢得多。也许它以键盘重复频率运行,因为单个按键似乎非常灵活。

用户界面非常古怪,花了我一段时间来弄清诸如如何显示回溯线之类的基本信息。

菜单中的键盘快捷键似乎无效,例如,按F6键不会使程序运行。

例如,内存窗口的文本框似乎不支持复制/粘贴,也根本不接受按键。在输入数字之前,我不得不打开和关闭内存视图几次。

内置绘图仪似乎是一个不错的主意,但是它卡在了“启动gnuplot ...”上。同样,"执行窗口"卡在"启动xterm ..."上。在后者中单击取消没有效果,在前者中产生:

分段故障内部错误(分段故障)糟糕!您在DDD中发现了一个错误。如果可以重现该错误,请向< [email protected]>发送错误报告,使DDD 3.3.12(x86_64-unknown-linux-gnu)这样的主题得到“分段错误”, #39; signal为了使我们能够修复该错误,您应该包括以下信息:*您正在做什么以获得此消息。报告所有事实。*〜/ .ddd / log'的内容此会话生成的文件。请另阅读"报告错误"部分。在DDD手册中。我们感谢您的支持。分段错误(核心已转储)

尽管eclipse希望拥有所有内容,但可以说服Eclipse在“运行->”中进行足够的单击来调试现有的二进制文件。调试配置。

设置断点的按钮也全部变灰。也许仅在C / C ++文件中启用?

与gede不同,它确实允许直接访问gdb控制台,因此我能够手动设置断点。

不幸的是,当我尝试将版本信息从“关于”窗口复制到这篇文章时,eclipse崩溃了。

像eclipse一样,clion忍受了一些欺凌,然后勉强调试了自己没有构建的二进制文件。

在断言失败的断言之后,我可以上移和下移堆栈,但是我无法查看任何变量。

代替断点,我尝试暂停调试器,并使用'运行到游标'。但这每次我尝试时都会在不同的行上执行,而光标下一行仅执行一次。

{" version&#34 ;:" 0.2.0&#34 ;," configurations&#34 ;: [{" name&#34 ;:" Debug&#34 ;, " type&#34 ;:" gdb&#34 ;," request&#34 ;:" launch&#34 ;," target&#34 ;:" / home / jamie / focus / test&#34 ;," cwd&#34 ;:" / home / jamie / focus&#34 ;," valuesFormatting&#34 ;:" parseText&#34 ; }]}

在断言失败的断言时,vscode声称没有局部变量。但是当我在编辑器中将它们的值悬停时,它的确将其值显示为工具提示。

当我创建一个实际的断点时,变量面板会弹出来。但是它无法打印叶子的字节,并且也为该字段显示错误的类型。

我必须修补该二进制文件的解释器才能使其在nixos上运行。哪一个让我知道了:

配置:{名称:' Debug&#39 ;,键入:' lldb&#39 ;,请求:'启动&#39 ;,目标:' / home / jamie / focus / test& #39;,cwd:' / home / jamie / focus',valuesFormatting:' parseText&#39 ;、程序:' / home / jamie / focus / test',relativePathBase :' / home / jamie / focus',__ configurationTarget:5}正在监听端口36863 [2020-12-13T09:03:00Z错误codelldb :: dap_session]发送错误:runInTerminal(RunInTerminalResponseBody {process_id:None, shell_process_id:Some(28670)})线程'< unnamed>'在`Err`值上惊慌于名为“ Result :: unwrap()`”:Utf8Error {valid_up_to:40,error_len:Some(1)}&#39 ;, adapter / deps / lldb / src / strings。 rs:80:38stack backtrace:0:0x7f1ada5c94e0-< std :: sys_common :: backtrace :: _ print :: DisplayBacktrace as core :: fmt :: Display> :: fmt :: hf64fbff071026df5 1:0x7f1ada5e9cbc-core :: fmt: :write :: h9ddafa4860d8adff 2:0x7f1ada5c4837-std :: io :: Write :: write_fmt :: h1d2ee292d2b65481 3:0x7f1ada5cb710-std :: panicking :: default_hook :: {{closure}} :: h774214e4ef49ef panicking :: default_hook :: he30ad7589e0970f9 5:0x7f1ada5cbd73-std :: panicking :: rust_panic_with_hook :: haa1ed36ada4ffb03 6:0x7f1ada5cb949-std :: panicking :: begin_panic_handler:} 7:7:1:7:1:7:1: :: backtrace :: __ rust_end_short_backtrace :: h39910f557f5f2367 8:0x7f1ada5cb909-rust_begin_unwind 9:0x7f1ada5e7841-core :: panicking :: panic_fmt :: h4e2659771ebc78eb 10:0x7f1ada5ed3a:one:ex:b:e:e:n:one: c33a 11:0x7f1ada5a9854-lldb :: sberror :: SBError :: error_string :: hff20ca5f93a68bd5 12:0x7f1ada45e4b1-codelldb :: debug_session :: DebugSession :: complete_launch :: h197396fdda146210 13:0x7f1from; GenFuture T as core :: future :: future :: Future> :: poll :: hfa91a76b3715cfe9 14:0x7f1ada3e6066-< core :: future :: from_generator :: GenFuture<作为核心::: future :: future :: Future> :: poll :: h11ce9c930539db27 15:0x7f1ada492b63-tokio :: runtime :: task :: harness :: Harness< T,S> :: poll :: {{closure}} :: hf35e784ff58ca6bb 16:0x7f1ada4adb88-tokio :: runtime :: task :: harness :: Harness< T,S> :: poll :: hb2566aad962846f8 17:0x7f1ada57d439-std :: thread :: local :: LocalKey:< T> with :: hb9f9390b9877aa03 18:0x7f1ada594657-tokio :: task :: local :: LocalSet :: tick :: h53cd42be3837c60f 19:0x7f1ada40bd21-< tokio :: task :: local :: RunUntil< T> as core :: future :: future :: Future> :: poll :: h26dbd6d7deb98451 20:0x7f1ada3e82e9-< core :: future :: from_generator :: GenFuture<作为核心::: future :: future :: Future> ::: poll :: h3328d67315cd8716 21:0x7f1ada3d688e-tokio :: runtime :: enter :: Enter :: block_on :: hbab100b0e528eaf6 22:0x7f1ada4aaf1b-tokio:pool :ThreadPool :: block_on :: ha924e5bb3e54e7b5 23:0x7f1ada40a285-tokio :: runtime :: context :: enter :: h88d7ee405456e527 24:0x7f1ada3d6a8e-tokio :: runtime :: Runtime :: block_on :: 7b40056b400 0b7b00b7e0b7e0b0e0b0b7b0b0e7b0e7b0e0b0b7e0b0b7e0b0b0b0b7e0b7b0e0b0b0b国家地区-codelldb :: main :: h83c2fac006256d73 27:0x5613d0710dd3-std ::

......