非常昏昏欲睡捕获MinGW编译文件时看不到函数名 [英] Very Sleepy doesn't see function names when capturing MinGW compiled file

查看:25
本文介绍了非常昏昏欲睡捕获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.

(我的应用程序名为.exe)
所以Sleepy看不到函数名,我需要如何编译/运行才能使其工作? 昏昏欲睡的网站提供:

支持GCC/明文。您现在可以分析嵌入了DWARF2数据的可执行文件,它应该可以工作。这不需要特殊选项,只需使用"-g"进行编译,以确保存在符号。您可能还希望使用"-FNO-OMIT-FRAME-POINTER"来确保正确的调用堆栈,尽管Sleepy通常都可以在这两种方式下工作。你不需要用"-pg"或任何垃圾。它甚至可以在微软动态链接库和GCC动态链接库之间进行正确的堆栈遍历,这比你想象的要难。

但对我来说还不够。

推荐答案

通常我们使用参数调用非常昏昏欲睡的命令(或任何其他调试工具):

  • -O0:设置默认代码优化(用来减少时间或空间的优化代码可以隐藏一些功能)
  • -g:用于保留函数和变量的名称,默认情况下这些函数和变量会被破坏,以优化可执行文件,但会降低可调试性:gcc -g :what will happen
  • -fno-omit-frame-pointer:根据When should I omit the frame pointer?的说法,它还用于通过省略帧指针来改进调试(该特性用于提高性能,但会降低调试的可读性)。使用该选项,输出汇编代码更加简单。这有助于调试器
  • -gdwarf-2https://gcc.gnu.org/onlinedocs/gcc-3.4.5/gcc/Debugging-Options.html指定将其设置为强制输出调试格式为"dwarf2"。事实上,-g选项只是告诉编译器"保留一些信息"。gdwarf将指定输出格式(如果可能)。

您还可以添加-glevel来表示输出信息的精度。默认值为2。它不保留宏和某些定义。或许您可以将其设置为3。

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

我希望这会有帮助

这篇关于非常昏昏欲睡捕获MinGW编译文件时看不到函数名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆