我用一大堆cpp文件编译了一个dll文件。我想看看每个cpp对dll的最终大小有多大贡献,以减少它的大小(比如通过排除一些库)。有什么办法吗?谢谢! 最佳答案 这范围从非常困难(你向哪个对象收取库函数)到不可能(当使用整个程序优化来跨编译单元边界内联时)。我还建议它不是很有用。您需要知道要精简哪些功能,而不仅仅是哪些文件。在构建期间生成map文件(将/MAP传递给LINK.EXE)可能是您所能做的最好的事情。Thedocumentation还提到了一些关于符号组的内容,您也可以利用它们来发挥自己的优势。
我在VisualC++2010(Win32应用程序,非托管代码)中有一个项目,我在其中遇到了一个非常奇怪的行为。我设置了一个断点,但它根本没有中断!线索:在exe文件路径下生成一个PDB文件。Debug/Modules窗口显示消息“Binarywasnotbuiltwithdebuginformation.”。手动加载PDB文件(调试/模块,右键单击可执行模块,从/符号路径加载符号,然后双击PDB文件)提示“在此文件夹中未找到匹配的符号文件。".我的设置:C++/通用/调试信息格式:程序数据库。C++/优化:禁用。C++/代码生成/运行时库:多线程调试。链接器/调试/生成调试信息:是。
我有一个应用程序崩溃,结果它在Windows平台上生成故障转储。我将exe和dll文件发送给客户。客户发来了user.dmp和drwtsn32.log文件给我。但是,客户没有对应的pdb文件。客户只有dll和exe文件。因此,当我将此user.dmp文件附加到Windbg时,我没有得到符号。那么,我需要做什么才能获得符号。我需要将pdb文件发送给客户吗?如果是,当发生崩溃时他需要如何处理这些pdb文件?我使用三台不同的机器:a)构建机器,c)客户的测试机器和c)我自己的调试机器(与构建机器不同)。windbg安装在调试机器上。我可以将所有pdb文件从构建机器复制到我的调试机器中。请告诉
第一次使用C#,但我有Java经验。我写了一个HelloWorld程序来启动自己,但是我在编译时遇到了这个找不到或打开PDB文件错误。'ConsoleApplication4.vshost.exe'(CLRv2.0.50727:ConsoleApplication4.vshost.exe):Loaded'C:\Windows\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll'.CannotfindoropenthePDBfile.'ConsoleApplication4.vshost.exe'(CLRv2.0
如何在MSI安装程序中包含pdb文件以与应用程序的其余部分一起部署?我想在我们生成的错误日志中保留行号和完整堆栈跟踪。更新除非您分发pdb,否则堆栈跟踪中不会报告代码的行号,我已经对此进行了测试。当我构建MSI并要求MSI安装程序项目包含各种项目输出(大约5个)时,如何将这些项目输出的pdb也包含在MSI中?或者如何从异常ex中获取此信息(代码行号)到日志中? 最佳答案 对于VisualStudio部署项目,您应该执行以下操作:添加->项目输出->调试符号还要确保在每个项目构建配置中启用*.pdb生成。
我正在尝试将两个程序集合并为一个程序集,它运行良好。然而,当我也尝试合并*.pdb文件时,出现错误:Accesstothepath"F:\Fentec\Businessplan\trunk\Ausgabe\Debug\modules\Planrechnung\Planrechnung.pdb"isdenied.如果我使用/ndebug选项来跳过合并*.pdb文件,它工作正常。但是当然不能在调试时加载符号。起初我以为在postbuild事件中调用ILMerge时,Planrechung.pdb正在使用并被锁定。我也尝试关闭VS2010并从命令行调用ILMerge,但结果保持不变。我检查了
最近几天我一直在huntingdownaproblem-结论:我的VisualStudio2017调试器无法在.NETFramework项目中使用“可移植”格式的PDB。对于可移植格式,我的意思是转到项目的设置,然后转到Build->Advanced然后选择portable在Debugginginformation下.当我开始调试像这样构建的.NETFramework项目时,断点未命中。当我暂停调试器并寻找它没有加载符号的原因时,它说(在Symbolloadinformation下):PDBformatisnotsupported我可以用任何.NETFramework项目重现它。目标框
我在VisualStudio选项中将符号缓存目录设置为D:\symbols:在此目录中,VisualStudio创建了一个层次结构,其顶层目录与PDB文件名(例如ole32.pdb)相匹配,在下一层是一个或多个目录,例如D0C3BDDD4ADD4E87B2B5E803303B8D772(看起来像33位十六进制数),里面是PDB文件本身,大概是从MicrosoftSymbolServers下载的。我想这些十六进制数代表PDB文件的版本。我想知道,这些数字是否有任何结构或意义,以及如何从PDB文件中提取它们(理想情况下,使用C#)?给定某个其他文件夹中的PDB文件,是否可以在符号缓存中找到
我在我的代码库中使用库已有一段时间了,我想直接调试到库级别。为此,我下载了源代码并将该项目作为现有项目包含到我的C#解决方案中。然后我让我的其他项目引用该项目而不是下载的.DLL。在引用项目而不是DLL后,我通过调试器运行我的解决方案并尝试进入一个函数调用,该函数调用本应调用外部项目,但它直接越过它。调试时,我打开“模块”窗口,看到DLL的符号状态显示为“PDB与图像不匹配”,这可能是无法调试此项目的原因。我的问题很简单,如果我的项目直接引用.csproj文件作为引用,为什么PDB与图像不匹配?对于要运行的版本,绝不应该有任何歧义。 最佳答案
在VisualStudio(2015)中调试打开的解决方案/项目时,我想调试(进入)位于引用程序集之一的方法调用。该程序集具有.pdb(复制到本地)和源代码。该程序集实际上也是我的类库项目,但不在当前解决方案中,而是在其他解决方案中。我知道调试此程序集的简单解决方案是将其项目添加到当前解决方案而不是引用它,然后调试体验将是无缝的。但是由于某些原因,这对我来说效率不是很高,例如,我应该添加许多程序集(数十个),但我不想以一个巨大的解决方案结束。到目前为止我做过/尝试过的事情:我没有选中仅我的代码我已检查其他程序集的.pdb是否已复制到我当前项目的输出文件夹中。尝试在调用之前设置一个断点,