标签: gdb

如何从 wsl2 访问 Windows 本地主机?

我的 Windows 11 上安装了 wsl2(ubuntu)。

我已经在 Windows 本地主机上设置了一个 gdb 侦听器服务器,并希望从 wsl2 访问它。但我的 Windows 机器和 wsl 虚拟机似乎使用不同的网络适配器。

>ipconfig

Windows IP Configuration


Ethernet adapter vEthernet (Default Switch):

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::1114:bb:d0ad:93f8%18
   IPv4 Address. . . . . . . . . . . : 172.29.192.1
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . …
Run Code Online (Sandbox Code Playgroud)

networking tcp gdb windows-subsystem-for-linux wsl2

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

如何关闭 GDB TUI?

我有这个 GDB TUI/布局。如何返回到默认的 GDB 视图?

我不能只是重新启动 GDB,因为我手头有重要的回溯,只要我有这些额外的窗口,我就无法在基本视图上很好地滚动。

gdb

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

关闭打开的文件而不终止进程

我在 CentOS 7 上运行了 java(yeah java...) 应用程序。过了一会儿,有很多“已删除”的文件困扰着我。

对于使用的已删除文件(不是问题):

lsof | grep "(deleted)"
Run Code Online (Sandbox Code Playgroud)

我在 /proc/pid/fd/... 中找到了它们,我的问题是如何在不杀死进程的情况下杀死/删除它们(进程必须 24/7 运行)。

我在google上看到我可以使用gdb工具,但我不知道如何使用它。你能帮我吗(只是写一步一步的手册)?

如果您有其他建议,我很乐意听取。

linux java process gdb lsof

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

在GDB中,如何直接跳转到最顶层的调用栈帧?

我有一个 C 程序,它在深入陷入无限递归混乱之后对错误进行分段。在 GDB 中回溯过程是没有用的,因为调用堆栈帧至少有1000 帧深,并且重复的函数调用是一系列四个常见的递归函数调用(因此断点似乎没有用)。对 backtrace 的重复调用只是一遍又一遍地读出四个函数名称。我突然想到,做 'up' 'up' 'up'... 会让我更上一层楼,所以我可以看到这种模式首先开始发生的地方,但似乎从最顶层的调用开始会更有效堆栈帧并逐步下降,因为我的直觉是无限递归在过程的早期开始。如果调用堆栈总共有 N 帧,我知道我可以做

gdb>> up N
Run Code Online (Sandbox Code Playgroud)

到达堆栈的顶部(第 N 帧),但问题是我不知道 N。是否有用于查找调用堆栈中的总帧数的命令?或者,是否有一个巧妙的内置 GDB 命令用于跳转到最顶层的帧?我突然想到最顶层的框架应该是main()函数——我可以利用这些知识到达最顶层的框架吗?

c gdb debug

10
推荐指数
2
解决办法
8780
查看次数

为什么我在构建 gdb 时找不到 termcap 库?

make 然后失败了:

配置:错误:没有找到 termcap 库,但是 termcap 库就在那里,为什么找不到它?

checking for library containing zlibVersion... -lz
checking zlib.h usability... yes
checking zlib.h presence... yes
checking for zlib.h... yes
checking for library containing dlgetmodinfo... no
checking for iconv... yes
checking for iconv declaration... install-shextern size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
checking for library containing waddstr... no
configure: WARNING: no enhanced curses library found; disabling TUI
checking for library containing tgetent... no
configure: error: no termcap …
Run Code Online (Sandbox Code Playgroud)

centos build make gdb autotools

10
推荐指数
2
解决办法
3万
查看次数

如何将内存转储到 gdb (osx) 中的文件?需要拯救我的工作

我需要知道如何将 Safari.app 中的内存转储到文件中。

我已经输入了 gdb attach 6741(我的 safari PID)。

怎么办?

我尝试在 google 上搜索 gdb 的帮助,但我找不到任何告诉我该怎么做的东西,即使搜索“如何在 gdb 中转储内存”:(

我尝试了“帮助转储”,它给了我一堆命令,但没有一个起作用。我最接近的是:

(gdb) dump memory ~/safaridump.bin 0
Missing stop address.
Run Code Online (Sandbox Code Playgroud)

那么停止地址是什么?我不知道?我怎么知道停止地址?我尝试在谷歌上搜索“缺少停止地址”gdb”,但没有帮助。我不知道如何获得停止地址。

我试过这个:

(gdb) 转储内存 ~/safaridump.bin 0 0xffffffff

那也没有用。

我懂了:

gdb stack crawl at point of internal error:
0   gdb-i386-apple-darwin               0x0012fd8f internal_vproblem + 316
1   gdb-i386-apple-darwin               0x0012ffd3 internal_verror + 43
2   gdb-i386-apple-darwin               0x00130008 align_down + 0
3   gdb-i386-apple-darwin               0x00130a21 xstrvprintf + 0
4   gdb-i386-apple-darwin               0x00130c25 xmalloc + 40
5   gdb-i386-apple-darwin               0x000045d6 dump_memory_to_file + 241
6 …
Run Code Online (Sandbox Code Playgroud)

gdb macos

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

如何在 OS X Mojave 上协同设计 gdb?

从自制软件(通过$ brew install gdb)安装 gdb 后,我按照这些说明授予 gdb 附加到进程的权限。

当我到达运行命令的步骤时:

$ codesign --entitlements gdb-entitlement.xml -fs gdb-cert $(which gdb)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,退出代码为 1:

/usr/local/bin/gdb: errSecInternalComponent
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚出了什么问题,因此无法继续安装 gdb 的工作版本。有什么帮助吗?

额外信息:

  • Mac OS X 版本 10.14.4

  • GDB 8.3 版(通过自制软件)

  • 将我的用户添加到_developer组中;没有帮助

  • 尝试重新启动我的机器sudo killall taskgated但无济于事

  • 尝试安装早期版本的 GDB (8.0.1),但得到相同的结果

mac gdb code-signing macos-mojave

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

向两个窗口发送一个击键 (Ubuntu)

我正在运行 Ubuntu Linux。我有两个并排运行的打开的终端窗口。我希望能够按一次回车键,并将该击键发送到两个窗口。

(我正在做的是使用调试器在两个不同的系统上逐步执行一些代码,并且我不想在逐步执行代码时在窗口之间来回切换。)

谢谢!

linux terminal gnome gdb ubuntu

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

软件:从命令行启动英雄联盟观众模式 (Mac)

背景:最后是 tl;dr

英雄联盟有一个旁观者模式,在这种模式下,您可以延迟 3 分钟观看其他人的比赛(基本上是重播)。 受欢迎的 LoL 网站 OP.GG想出了一种巧妙的方法,将这些观众游戏托管在他们自己的服务器上,从而使它们可重玩,而不是仅在游戏运行时可用(就像 Riot 那样)。

如果您从 OP.GG 请求重播,它会发送一个批处理文件,查找联盟所在的位置,然后神奇的事情发生了:

    @start "" "League of Legends.exe" "8394" "LoLLauncher.exe" "" "spectator fspectate.op.gg:4081 tjJbtRLQ/HMV7HuAxWV0XsXoRB4OmFBr 1391881421 NA1"
Run Code Online (Sandbox Code Playgroud)

这在 Windows 上运行良好。我正在尝试让它在 Mac(它有一个官方客户端)上运行。

首先我尝试手动运行相同的命令,(为了方便拆分)

/Applications/ ... /LeagueOfLegends.app/ ... /LeagueofLegends 8393 LoLLauncher \
/Applications/ ... /LolClient spectator fspectate.op.gg:4081 tjJbtRLQ/HMV7HuAxWV0XsXoRB4OmFBr 1391881421 NA1
Run Code Online (Sandbox Code Playgroud)

但是,运行它只会启动 LoLLauncher,它会关闭所有活动的 League 进程。如果我只是打电话,会发生完全相同的事情/Applications/ ... /LeagueOfLegends.app/ ... /LeagueofLegends

接下来,我尝试查看启动旁观者模式时实际发生的情况,因此我运行$ ps -axf | grep -i lol了显示

UID   PID  PPID   C STIME   TTY           TIME CMD
503  3085     1 …
Run Code Online (Sandbox Code Playgroud)

command-line gdb macos

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

GDB 7.6 TUI 不刷新显示,创建工件

我在远程服务器上使用 GDB 7.6。

当我开始时gdb,一切都很好,只要要调试的程序没有运行。我可以使用向上和向下箭头浏览 GDB 历史记录等。没有要报告的显示错误。

当我在程序中的某处创建断点然后run调试程序时,显示有许多工件(字符显示在错误的位置),直到我运行refresh. 从那时起,nextstepinexti、 向上和向下箭头等都可以使用,显示器继续在错误的位置绘制字符。如果我不在refresh每一步都运行,则显示不是它应该的样子。此外,当我按下向上或向下箭头键时,会显示原始字符代码^[[A^[[B,不允许知道将执行哪个历史命令。

我尝试定义钩子

define hook-nexti
refresh
end
Run Code Online (Sandbox Code Playgroud)

这实际上刷新了屏幕,但有时仍然会出现不需要的工件(尤其是在执行代码的突出显示行上)并且不是一个可接受的解决方案,因为我不需要在我的本地机器上使用钩子(GDB 7.11,zsh 5.0.2) .

我的机器上碰巧也有一个 GDB 7.7,可以重现该问题。这是在 GDB 7.7 和 GDB 7.11 之间修复的错误吗?如果是,我将只binutils-gdb从源代码编译,因为我在远程服务器上没有 root 访问权限。

gdb

6
推荐指数
0
解决办法
609
查看次数

如何更改emacs中的默认目录?

当我使用

M-x gdb 
Run Code Online (Sandbox Code Playgroud)

当大量源文件在 emacs 中打开时,emacs 中的默认目录通常与我的工作副本目录不同,以运行我想要运行的文件。键入我要调试的文件的正确完整路径总是很痛苦。我怎么能解决这个问题?有没有办法将当前默认目录更改为我的项目的工作副本?

emacs gdb

3
推荐指数
1
解决办法
8185
查看次数

如何在 Arch Linux 上安装 gdb

如何在 Arch Linux 上安装 GNU 调试器 (gdb)?我已经通过运行以下命令检查了我尚未安装 gdb:

gdb -help
Run Code Online (Sandbox Code Playgroud)

我试过这个:

sudo apt-get install gdb
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

arch-linux gdb

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