问题标签 [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 回答
291 浏览

visual-studio - 有没有办法让 Delphi 读取其他调试格式?

当我在 Delphi 中调试某些东西并且堆栈跟踪中有一个系统库时,我得到了库的名称和被调用的函数。不幸的是,这似乎不适用于任何其他外部 DLL。我有一个用 Visual C++ 2005 编译的,任何时候它给我带来任何麻烦,我都必须附加 VS 调试器并从原始入口点开始跟踪代码,因为 Delphi 让我不知道什么是实际发生。

这个DLL是用VS的调试信息编译进去的,但显然Delphi没有办法读取它。有什么方法可以修改调试选项来改变它,这样我就可以在堆栈跟踪中获得有意义的函数名称,就像使用系统库一样?

0 投票
4 回答
6388 浏览

c++ - 向用户显示异常调试信息

我目前正在为我的 OSS 应用程序添加异常和异常处理。异常从一开始就是一个普遍的想法,但我想找到一个好的异常框架,老实说,在开始使用它们之前更好地理解 C++ 异常处理约定和习语。我在 C#/.Net、Python 和其他使用异常的语言方面拥有丰富的经验。我对这个想法并不陌生(但远非大师)。

在 C# 和 Python 中,当发生未处理的异常时,用户会得到一个很好的堆栈跟踪,通常会得到很多非常有用的无价调试信息。如果您正在开发 OSS 应用程序,那么让用户将该信息粘贴到问题报告中是……好吧,让我们说我发现没有它就很难生活。对于这个 C++ 项目,我得到“应用程序崩溃”,或者来自更知情的用户,“我做了 X、Y 和 Z,然后它崩溃了”。但我也想要调试信息!

我已经(并且非常困难地)接受了这样一个事实,即我永远不会看到获取 C++ 异常堆栈跟踪的跨平台和跨编译器方式,但我知道我可以获得函数名称和其他相关信息。

而现在我想要我未处理的异常。我正在使用boost::exception,他们有这个非常好的diagnostic_information thingamajig 可以打印出(未损坏的)函数名、文件、行,最重要的是,程序员添加到该异常中的其他异常特定信息。

自然,我会尽可能地处理代码中的异常,但我并没有天真地认为我不会让一对夫妇溜走(当然是无意的)。

所以我想要做的是将我的主要入口点包装在一个try块中,该块catch创建一个特殊的对话框,通知用户应用程序中发生了错误,当用户单击“更多”或“调试”时显示更详细的信息信息”或其他。这将包含来自诊断信息的字符串。然后我可以指示用户将此信息粘贴到问题报告中。

但是一种烦人的直觉告诉我,将所有内容都包装在 try 块中是一个非常糟糕的主意。我要做的事是愚蠢的吗?如果是(即使不是),有什么更好的方法来实现我想要的?

0 投票
5 回答
52805 浏览

assembly - Gnu Assembler (GAS) 中的 CFI 指令有什么用途?

每行之后似乎都有一个 .CFI 指令,并且这些示例的种类繁多.cfi_startproc.cfi_endproc等等。 更多here

我没有明白这些的目的。

0 投票
0 回答
194 浏览

visual-studio-2008 - 有没有办法为纯粹是其他静态库的聚合的静态库保留调试信息?

我有一个构建静态库的项目,它纯粹是其他静态库的聚合。这是通过将输入库作为文件添加到项目中来实现的。然而,即使调试信息可用于输入库,也没有可用于输出聚合库的信息。如果在链接到另一个二进制文件时聚合库需要调试信息,则必须修改构建该二进制文件的项目以链接到聚合库的输入库而不是聚合库本身。

有没有办法让调试信息可用于以这种方式创建的聚合库?还是应该以不同的方式创建聚合库(不将输入库作为文件添加到项目中)?

0 投票
1 回答
2843 浏览

java - `/usr/bin/strip` 的任何 Java 对应项?

是否有任何工具可以从 Java .class 文件中删除调试信息,就像/usr/bin/strip可以从 Linux 上的 C/C++ 对象文件中删除一样?

编辑:我喜欢 Thilo 和 Peter Mmm 的回答:Peter 的回答很简短,直言不讳地暴露了我对 JDK 附带的内容的无知;Thilo 的 ProGuard 建议无论如何我肯定会检查它似乎提供的所有额外功能。谢谢蒂洛和彼得!

0 投票
3 回答
15634 浏览

c - 将调试信息发送到 Visual Studio“输出”窗口的简单方法

我在Visual Studio 2010中启动了一个空白项目来编写 C 应用程序。如何将调试信息发送到输出窗口(菜单Debug -> Windows -> Output)?有没有相对简单的方法来实现TRACEOutputDebugString类似的东西?

0 投票
3 回答
6819 浏览

c - 什么是调试信息?

我是一名中级 C 程序员,正在学习他的方式。我最近学习了使用 GDB(实际上是被迫),并且正在使用 Ptrace 做一些代码。
我在浏览 ptrace 上的一些代码时遇到了“DEBUG INFO”。

我想知道这意味着什么以及何时应该将其包含在我的代码中?
什么是调试信息文件?

我无法从谷歌和维基中找到与此相关的太多内容。该标签也没有维基。也许如果你能指出我正确的方向,我可以写一个来回报。

0 投票
1 回答
4364 浏览

gcc - objdump/readelf 获取变量信息

我需要从已编译的 c 程序中获取有关全局变量的信息。我在这里问了一个类似的问题。

我现在遇到的问题是我试图提取变量信息的程序非常大,只需要 4 秒才能获得文本中的树(readelf -w[i] file.out)。然后我必须解析来回跳跃的树才能到达我需要的地方。例如,如果一个变量是类型的,const unsigned char * volatile MyVariable那么我将不得不导航到树的 5 个不同节点,如果程序包含 1000 个变量,那么需要一段时间才能得到我需要的东西。

所以我的问题是如何更好地利用 readelf 命令来实现我所需要的。该readelf -w[i] file.out命令为我提供了我需要的更多信息(每个函数、子程序、局部变量等)。例如,我没有通过该命令的输出来获取全局变量,而是使用该readelf -s --wide file.out命令来获取变量。该命令只会给我变量的名称,所以我仍然需要在树中查看变量是否为整数。

此链接的第 237 页上,我相信有一个示例说明如何获取有关类型的信息。这是一张照片:

在此处输入图像描述

我需要大约 15 秒来解析我需要的内容,但仍然有几个错误。如果我不必重新发明轮子并更好地使用 readelf 命令,那就太好了。

0 投票
1 回答
484 浏览

windows - 找出模式以在编译的程序中查找变量

我需要从已编译的 c 程序中提取全局变量。我现在正在做的是使用 Linux readelf 命令来获取该信息。换句话说,当我这样做时:

我使用可以从这里readelf.exe下载的程序来做到这一点。因为我使用的是 Windows,这是我需要的唯一命令。在 linux 上,我将打开控制台并执行readelf -w[i] myFile.out

无论如何,当我执行该命令时,我会得到类似的东西:

有了那个“树”,我可以得到所有的全局变量和类型。例如,如果您查看第一个变量NetBuf_ID_Ctr,我们可以看到我们可以获得有关节点上的类型的信息 <0x86923>。那个节点在树的某个地方!如果你看一下那实际上是第一个节点。开始的那个 <1><86923>....,如果您在该节点内部看到,我们知道该变量是一个无符号整数,大小为 4 个字节。


现在我的问题是,当我使用 readelf 命令时,我得到 在此处输入图像描述 了 192883 行需要解析的文本!这棵树给了我更多我需要的信息。如果我用十六进制编辑器查看文件,这就是我所看到的:

在此处输入图像描述

请注意,我能够找到相同的变量NetBuf_ID_Ctr,并且它旁边(突出显示)是它的地址<0x86923>

互联网上有没有地方可以指导我如何构建树?命令 readelf.exe 需要 0.1 秒来创建树!它将输出放在 StreamReader 上,这就是它如此快的原因。如果我希望将 StreamReader 放在内存上,将其转换为需要很长时间的字符串。


编辑

总之,我想知道如何从 myFile.out 构造树(readelf 的输出)。我无法弄清楚这种模式,互联网上也没有一个地方可以解释如何。

0 投票
1 回答
232 浏览

grails - Groovy、STS 和调试信息、信息或符号

我试图在我的 Groovy 代码中包含调试信息或符号,以便我可以使用带有 SpEL 的 Spring Security 注释按名称访问带注释的方法的参数。例如:

当我使用使用 Groovy RunTest 脚本的 STS 'run-test' 命令时,一切正常。我的意思是我可以按名称访问方法的参数。但是,每当我尝试使用“run-app”命令时,调试信息都不包括在内。

我查看了 RunTest 脚本,该脚本显式调用了 Java 编译器,并将调试选项设置为 true。

如何为我的开发和生产环境启用调试信息?我是否需要修改 Groovy 脚本以在 Groovy 代码上调用 Java 编译器,或者有没有更简单的方法?