微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

捕获MinGW编译文件时,非常困难不会看到函数名称

我是新来的,所以可能会丢失一些基本的东西。 我用gcc 4.8(MinGW)和-g选项编译我的C程序。

然后我运行它,捕获非常困。 它一切正常,但Sleepy的输出如下所示:

memcpy 0.98 0.98 7.65 7.65 msvcrt unkNown 0 [00000000004038FE] 0.77 0.77 6.02 6.02 a 0 memset 0.63 0.63 4.92 4.93 msvcrt unkNown 0 [0000000000404549] 0.42 0.42 3.29 3.29 a 0 [000000000040282A] 0.35 0.35 2.73 2.73 a 0 [0000000000404600] 0.25 0.25 1.99 1.99 a 0 .... etc.

(我的应用程序被称为a.exe)

所以Sleepy没有看到函数名,我怎么需要编译/运行才能使它工作? 昏昏欲睡的网站给出:

支持GCC / mingw。 您现在可以使用embedded式DWARF2数据对可执行文件进行概要分析,并且可以正常工作 这不需要特别的选项,只需用“-g”编译,以确保你有符号存在。 你可能也希望使用“-fno-omit-frame-pointer”来确保正确的调用堆栈,尽pipeSleepy一般都可以工作。 你不需要使用“-pg”或任何垃圾。 它甚至可以将Microsoft DLL之间的正确堆栈转换为GCC,这比您想象的要困难得多。

如何在Windows上编译,编译和编译C ++ 14

我可以发送信号到不同的线程

如何使用-std = gnu99编译Linux内核模块?

不能运行任何程序

使文件问题:在每一行的错误

但在我的情况下是不够的。

不能用64位gcc在32位build立boost库

核心实用程序缺less__vdso_time?

什么,馅饼确实做?

C函数不会“等待”任何input,但会检测是否有任何input?

在Ubuntu 11.04中禁用堆栈碎片保护

通常我们使用下面的参数来调用sleepy命令(或其他的调试工具):

-O0 :设置认的代码优化(更优化的代码用于减少时间或空间可以隐藏一些功能

-g :它用于保留函数和变量的名称认情况下是为了优化可执行文件而改变的,但是它使得它更少调试: gcc -g:会发生什么

-fno-omit-frame-pointer :根据什么时候应该省略帧指针 ,它还用于通过省略帧指针(一种用于提高性能功能,但是使调试更不可读)来改善调试? 。 使用该选项,输出汇编代码更简单。 这有助于调试器

-gdwarf-2 : https : -gdwarf-2指定设置为强制输出调试格式为“dwarf2”。 实际上,-g选项只是告诉编译器“保留一些信息”。 gdwarf将指定输出格式(如果可能的话)。

您还可以添加-glevel来指示输出信息的精确度。 认的是2.它不保留宏和一些定义。 也许你可以设置为3。

如果还不够,也许你可以给一个最小的工作样本来查看确切的问题(哪个函数应该出现在日志中)?

我希望这会有所帮助

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐