Questions tagged «debug-symbols»

调试符号是表示在给定的可执行模块中哪种编程语言结构生成了特定机器代码的信息。



16
Visual Studio加载符号
我现在正在从事ColdFusion项目一段时间,而Visual Studio至少对于我来说开始表现得很奇怪。 我观察到,当我开始调试时,它构建了项目,启动了部署,部署完成,并且开始为我的项目加载符号。 但这很慢,我不知道为什么它开始执行此步骤。我该怎么办? 此符号加载步骤是否必要?如何禁用它? 在工具->选项->调试->符号对话框中,没有添加符号文件(.pdb)位置。我将项目的调试目录指向下面的字段,然后选中了“仅当符号为....时才搜索上面的目录”复选框。如何设置该对话框以关闭符号加载? 我在“模块”窗口中查看了加载了哪些符号,但对我来说什么也没说。问题是什么?

9
Xcode 4.2调试不表示堆栈调用
我在iOS 5模拟器/设备中进行Xcode 4.2调试时遇到问题。如预期的那样,以下代码崩溃: NSArray *arr=[NSArray array]; [arr objectAtIndex:100]; 在iOS 4中,我得到了有用的十六进制数字堆栈跟踪。但是在iOS 5中,它给了我: *** First throw call stack: (0x16b4052 0x1845d0a 0x16a0674 0x294c 0x6f89d6 0x6f98a6 0x708743 0x7091f8 0x7fcaa9 0x2257fa9 0x16881c5 0x15ed022 0x15eb90a 0x15eadb4 0x15eaccb 0x6f02a7 0x6faa93 0x2889 0x2805) 谢谢。
140 ios  xcode  debug-symbols 

4
我应该将调试信息编译为“完整”或“仅pdb”的发行版吗?
在Visual Studio 2010中的C#项目中,如果转到“项目属性”>“生成”>“高级”>“调试信息”,则有三个选项:无,完整或仅pdb。基于对这个问题的回答,我相信我理解完全和仅pdb之间的一些区别。但是,哪个版本更适合发布版本?如果我使用“ full”,将会对性能产生影响吗?如果我使用“仅pdb”,则调试生产问题会更困难吗? “ full”和“ pdbonly”之间有什么区别?https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/compiler-options/debug-compiler-option

2
如何从Delphi程序或编译器生成的调试信息中提取局部变量信息(地址和类型)?
我的目标是: 给定Delphi编译的32或64位Windows程序中的挂起线程,可以遍历堆栈(可行) 给定堆栈条目,以枚举每种方法中的局部变量及其值。也就是说,至少要找到它们的地址和类型(整数32/64 /有符号/无符号,字符串,浮点数,记录,类...),可以将它们的组合用于查找其值。 第一个很好,这是这个问题的第二个。从高层次上讲,如何在Delphi中给定堆栈条目的情况下枚举局部变量? 从低层次看,这就是我一直在研究的内容: RTTI:未列出有关方法的此类信息。我实际上从未想到过这是一个现实的选择,但无论如何都要在此处列出。 调试信息:加载为调试版本生成的调试信息。 地图文件:即使是详细的地图文件(一种文本格式的文件!打开其中的文件并查看)也不包含局部变量信息。它基本上是地址和源文件行号的列表。非常适合地址与文件和线的关联,例如装订线中的蓝点;不太适合获得更详细的信息 远程调试信息(RSM文件)- 关于其内容或格式的未知信息。 TD32 / TDS文件:我目前的研究方向。它们包含许多其他信息中的全局和局部符号。 我在这里遇到的问题是: 没有TD32文件格式的文档(我可以找到。) 我对它们的大部分了解都来自使用它们的Jedi JCL代码(JclTD32.pas),我不确定如何使用该代码,或者不确定其中的结构是否足够广泛以显示本地var。我很确定它将处理全局符号,但是我对局部符号不确定。我定义了各种各样的常量,并且没有格式的文档,要阅读它们的含义,我在猜测。但是,这些常量及其名称必须来自某个地方。 我可以使用TDS信息找到的源无法加载或处理本地符号。 如果这是正确的方法,那么这个问题将变成“是否存在有关TDS / TD32文件格式的文档,并且是否有任何代码示例加载局部变量?” 代码示例不是必不可少的,但即使非常少也可能非常有用。


7
如何使用objdump反汇编一个函数?
我的系统上安装了二进制文件,并希望查看给定功能的反汇编。最好使用objdump,但其他解决方案也是可以接受的。 从这些问题中,我了解到,如果我只知道边界地址,则可以分解部分代码。从这个答案中,我学习了如何将拆分的调试符号转回单个文件。 但是,即使对单个文件进行操作,甚至分解所有代码(即,没有开始或停止地址,但使用的普通-d参数objdump),我仍然看不到该符号。只要所讨论的函数是静态的,就有意义,因此不会导出。不过,valgrind将报告函数名称,因此必须将其存储在某处。 查看调试部分的详细信息,我发现该.debug_str部分中提到的名称,但是我不知道有什么工具可以将其转换为地址范围。

4
在生产环境中部署调试符号(pdb文件)有什么风险?
我有一个记录异常跟踪记录的应用程序,我希望这些堆栈跟踪在生产环境中部署时包括文件名和行号。我想出了如何通过程序集部署调试符号,但是在研究这个问题的过程中,我遇到了这个问题,这意味着在生产环境中包括pdb文件不是一个好主意。对已接受答案的评论说:“ ...调试信息可以泄露敏感数据并成为攻击媒介。这取决于您的应用程序是什么。” 那么什么样的敏感数据可能会被暴露呢?调试符号如何用于危害应用程序?我对技术细节感到很好奇,但是我真正想要的是一种评估任何给定应用程序和生产环境中包括调试符号的风险的实用方法。或换一种说法:可能发生的最坏情况是什么? 编辑:后续问题/澄清 因此,根据到目前为止的每个人的答案,.NET应用程序似乎可以简化此问题。约翰·罗宾斯(John Robbins)博客中的这一点链接到迈克尔·马多克斯(Michael Maddox)的答案中,使我大跌眼镜: .NET PDB仅包含两条信息,即源文件名及其行以及本地变量名。所有其他信息已经在.NET元数据中,因此无需在PDB文件中重复相同的信息。 对我来说,这重申了其他人对Reflector的看法,这意味着真正的问题是对程序集的访问。一旦确定了这一点,关于PDB的唯一决定就是您是否关心公开文件名,行号和本地变量名(假设您最初并未向最终用户显示堆栈跟踪)。还是我简化得太多了?

8
阻止Visual Studio尝试加载特定DLL的符号
我已将Visual Studio 2005设置为使用Microsoft的符号服务器。我还安装了UltraMon,它将钩子DLL注入到每个进程中。每当我开始调试MFC应用程序时,Visual Studio都会说: "Loading symbols for C:\Program Files\UltraMon\RTSUltraMonHookX32.dll..." 从眨眼到数十秒不等。它永远不会找到那些符号...我能告诉它不要打扰吗? (我尝试创建一个空RTSUltraMonHookX32.pdb文件,但Visual Studio认为它不好,并继续进行查找。)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.