问题标签 [gdb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3226 浏览

c++ - 如何调试 .pc 文件?

我正在使用 emacs + gdb 在 unix 中调试一堆 .c 文件——而且它总是运行良好。但我从事的一些项目也有一堆 .pc (Pro*C/C++) 文件。这些文件在编译后会生成 .c 和 .i 相关文件。但是在运行时,我只能看到 gdb 中的 .i 文件——这些文件对调试没有用,而且总是不同步。换句话说,gdb 不会加载我需要的 .c 文件。

与我一起工作的一个人建议在另一个编辑器中打开 .c 文件,并尝试找到 gdb 显示的与 .i 文件一样的行的来源。

还有其他方法吗?如何在 gdb 中加载 .c 文件?如何调试这个 .pc 文件?

0 投票
2 回答
2978 浏览

iphone - 使用 GDB 从崩溃中检查 Objective C 类(HandleDelegateSource 错误访问)

我正在尝试调试 iPhone 上的间歇性错误,崩溃的痕迹如下所示:

当 GDB 停止时,我希望能够确定有关系统尝试调用哪个选择器的详细信息 - 我现在在 [NSInvocation Invoke] 周围设置了一个断点,但从那时起无法弄清楚如何检查详细信息我停止的 NSInvocation 对象。

0 投票
8 回答
14692 浏览

linux - 从进程内部转储 Linux 核心文件的好方法是什么?

我们有一个服务器(用 C 和 C++ 编写),它当前捕获一个 SEGV 并将一些内部信息转储到一个文件中。我想在我们捕获 SEGV 时生成一个核心文件并将其写入磁盘,因此我们的支持代表和客户不必对 ulimit 大惊小怪,然后等待崩溃再次发生以获得核心文件。我们过去曾使用过 abort 函数,但它受制于 ulimit 规则并且没有帮助。

我们有一些读取 /proc/pid/map 并手动生成核心文件的遗留代码,但它已经过时,并且看起来不太便携(例如,我猜它在我们的 64 位中不起作用构建)。在 Linux 进程中生成和转储核心文件的最佳方法是什么?

0 投票
2 回答
19997 浏览

debugging - 使用 Cygwin 可执行文件中的堆栈转储

所以我写了错误的代码,偶尔会崩溃......并创建了一个 stackdump 文件。

使用 addr2line 我可以通过将地址解码为一个来弄清楚程序是如何到达崩溃点的。是否有替代工具可以使用堆栈转储来简化调试?有没有办法在 Insight/Gdb 中加载这些信息?

0 投票
5 回答
1973 浏览

c++ - 在 Linux 中调试应用程序

我想在 Linux 中调试应用程序。该应用程序是用 C++ 创建的。GUI 是使用 QT 创建的。GUI 与可被视为应用程序后端的静态库链接。

我想调试静态库,但不知道该怎么做。

我尝试使用 gdb

但是我怎样才能附加图书馆呢?

有没有人有在 linux 中调试库的经验?

0 投票
4 回答
19989 浏览

debugging - 在 x86 上使用 GDB 而不调试符号?

如何使用 GDB 调试在 32 位 x86 处理器上没有调试符号的程序?检查函数参数、局部变量、解析指针对于知道如何做很有用。其目的并不是真正将其用于逆向工程,因为我有时只是懒得安装调试符号,并且很高兴知道如何从 gdb 中获取一些基本信息。

0 投票
8 回答
48506 浏览

shell - 调用 gdb 自动将参数传递给正在调试的程序

我想编写一个脚本,(在某些条件下)将执行 gdb 并使用一组参数 Y 自动运行一些程序 X。一旦程序完成执行,用户应该留在 gdb 的提示符下,直到他/她明确退出它.

一种方法是让脚本将运行命令和参数 Y 输出到某个文件 F,然后让脚本像这样调用 gdb:

但是有没有办法在不引入临时文件的情况下做到这一点?

0 投票
5 回答
18144 浏览

c++ - 在 gdb 中显示取消引用的 STL 迭代器

我有一个映射元素的迭代器,我希望 gdb 向我显示该迭代器的“第一个”和“第二个”元素的值。例如:

我可以在代码中使用 p.first 和 p.second,但在 gdb 中看不到它们。对于它的价值,在 dbx 中可以执行“print p.node.second_”之类的操作,但我可以在 gbd 中找到类似的任何内容。

我完全愿意有一个函数来传递对象类型,但我也无法让它工作。

有任何想法吗?谢谢!

0 投票
3 回答
17105 浏览

c++ - 如何使用 icc 编译器检查 gdb 中 std::vector 的内容?

我想检查 gdb 中 std::vector 的内容,但我无权访问 _M_impl,因为我使用的是 icc,而不是 gcc,我该怎么做?为简单起见,假设它是一个 std::vector 。

这里有一个非常好的答案,但是如果我使用 icc,这将不起作用,错误消息是“没有名为 _M_impl 的成员或方法”。这里似乎有一个不错的调试工具集但它也依赖于_M_impl。

0 投票
4 回答
28308 浏览

c++ - 什么是 __kernel_vsyscall?

我得到了一个看起来与我通常得到的内核非常不同的内核——大多数线程都在 __kernel_vsyscall() 中:

这意味着什么?

编辑:特别是,我通常在“pthread_cond_wait”和“___newselect_nocancel”中看到很多线程,现在这些线程位于每个线程的第二帧 - 为什么这个核心不同?