问题标签 [debug-information]

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 回答
524 浏览

linux - 如何从 vmlinux 安装 debuginfo 包

我正在使用以下选项集构建自己的内核。

所以我假设生成的 vmlinux 文件将包含所有必需的调试信息。

我将该内核安装在一台机器上,并将 vmlinux 文件放在 /boot/ 下。但是,当我尝试执行 perf annotate 时,它​​不会在汇编代码旁边显示源代码。它只显示汇编代码和 c 函数名称而不是整个源代码(我尝试在注释期间切换“s”)。

这是我的性能命令。

我在这里想念什么?我需要单独安装 debuginfo 包吗?

问候, 阿蒂什

0 投票
3 回答
4050 浏览

c++ - 使用 -g 编译本身会降低性能吗?

(这是关于 gcc 和 clang 的问题,但可能适用于其他编译器。)

如果我编译我的 C 或 C++ 代码,并使用-g开关生成调试信息,这本身是否会以任何方式降低已编译程序的性能......

  1. 使用最小优化 ( -O0)?
  2. 最大优化 ( -O3)?

注意:我并不是指必须解析/加载可执行文件的性能损失,由于额外的内容,性能损失更大;我的意思是运行的代码。

0 投票
1 回答
94 浏览

c++ - 在 Visual Studio 中制作私有可符号化版本的正确方法是什么?

在 Visual Studio 中构建私有符号化版本的正确配置是什么?我想生成并存储一个 PDB 文件,它允许我对构建的可执行文件的故障转储进行符号化,但要避免在可执行文件本身中嵌入调试信息,这将允许外部用户观察符号,例如函数和变量名称,而无需PDB。

我习惯了 DWARF 调试格式,它既可以嵌入到可执行文件中,也可以导出到单独的 dSYM 文件中,这似乎与 PDB 大致相当;我不确定 Visual Studio 是否有类似的选项,即曾经/有时在可执行文件中嵌入类似的调试信息,如果有,我需要打开哪些配置选项以确保发布版本没有t 嵌入此信息。

0 投票
1 回答
108 浏览

compilation - 使用 CMake 将 DebugInfo 添加到单个文件

我想在 LLVM 的源代码中调试单个文件。因为使用调试信息构建整个项目会浪费大量空间。LLVM 使用 CMake 作为其构建系统。如何将调试信息添加到单个文件?

0 投票
0 回答
88 浏览

c++ - 与MSVC链接后静态库的调试信息在哪里合并?

假设我有一个静态库,它使用选项生成它的调试信息pdb格式。/Zi接下来让我们将其链接到可执行文件中,该可执行文件还会在pdb.

  1. 静态库的调试信息将被合并到pdb可执行文件中,我对吗?
  2. 如果库直接在lib带有/Z7选项的文件中生成它的调试信息,但可执行文件仍然使用pdb来自静态库的调试信息将被合并的位置?进入pdb文件还是直接在可执行文件中?
0 投票
1 回答
2726 浏览

valgrind - “读取调试信息时出现严重错误” - 抑制?忽视?使固定?

我正在使用 valgrind 来尝试定位 C-cum-C++ 程序中违反内存访问的原因。即使避免了这种访问(即当一切正常时),valgrind 告诉我:

我应该如何处理这些警告?我是不是该...

  • 以某种方式修复它们?它在系统库中,而不是在我的代码中;甚至有可能对他们做点什么吗?
  • 以某种方式抑制它们(但不抑制任何真正的错误消息)?
  • 忽略它们——如果我既不能修复也不能压制?

注意:我在 X86_64 机器上使用带有内核 4.13.0-32 的 GNU/Linux Mint 18.4。

0 投票
1 回答
141 浏览

delphi - 是否可以从 DCU 中去除调试信息?

我正在使用来自 GetIt 的免费嵌入式 NexusDB,它没有来源,只有 .DCU

但是,这些 DCU 中包含调试信息,这极大地妨碍了调试,即当我尝试Step Into (F7)编写代码时,IDE 经常提示我源文件的位置,比如,,nxdb.pas然后,因为我没有这样的文件,所以进入 CPU仅带有行号的反汇编视图(参见底部的示例)。

同样的问题是Trace to Next Source Line (Shift+F7)

NexusDB 库文件夹仅包含一个版本的 .DCU,没有“发布”版本

所以我提出了这个问题 - 有没有办法从 .DCU 中去除调试信息?

仅具有行号的 CPU 视图示例:

0 投票
1 回答
514 浏览

assembly - 递归期间的堆栈帧外观。C 与汇编

我只是在学习汇编中的函数和堆栈框架等等,所以我一直在查看 gdb 中的堆栈框架,因为我运行了一个递归算法来看看会发生什么。

如果我在 C 中运行一些递归代码,堆栈看起来就像我期望的那样 - 每次调用函数时堆栈上的一个对象。在递归阶乘函数的最低递归级别,堆栈帧如下所示:(这是 gdb 中的回溯,在函数的第一行有一个断点。)

我的 C 代码是这样的:

现在我在汇编中做同样的事情(我已经从 Rey Seyfarth 的书“64 位汇编编程简介”中复制了这段代码,所以我假设它是正确的)并且,无论递归的深度如何,堆栈帧看起来像这样:(第 50 行是call fact)。

阶乘函数的代码是这样的 - 在这种情况下,断点位于以下sub rsp, 16行:

事实上,在这种情况下,回溯的输出真的让我很困惑。如果我在调用事实函数 ( ) 之前将断点放在行上,dec rdi那么结果通常是这样的:

但事实上第五次调用是这样的:

然后在第七次通话中,这个:

我的问题:

  1. 为什么堆栈的行为与 C 中的不同?

  2. 为什么我偶尔会得到最后一个看似垃圾的输出?

谢谢!

0 投票
1 回答
592 浏览

macos - 使用调试符号在 MacOS 上构建 Qt 应用程序

如何在发布模式下使用 Qt 框架编写带有调试符号信息的 macOS 应用程序?

我已经尝试过 Qt Doc 中的建议:

但是当我运行 nm 命令时,我得到了相同的输出。

我错过了什么?

提前致谢

0 投票
1 回答
439 浏览

gdb - GDB - 将地址映射到源代码中的行和列

gcc 和 clang 都有 option -gcolumn-info,它是这样描述的:

将位置列信息发送到 DWARF 调试信息中,而不仅仅是文件和行。

我已经用这个选项编译了我的二进制文件。现在我有了一些指令的地址,想把它翻译回源文件、行号和列。有没有办法在 gdb 中做到这一点?是否有其他工具可以提取此信息?

我知道我可以info line *0xabcd1234在 gdb 中使用来获取与该地址对应的源文件和行,但它没有显示该列。