Windows 很困不';捕获MinGW编译文件时看不到函数名

Windows 很困不';捕获MinGW编译文件时看不到函数名,windows,gcc,profiling,verysleepy,Windows,Gcc,Profiling,Verysleepy,我是新手,所以可能缺少一些基本的东西。 我用GCC4.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 u

我是新手,所以可能缺少一些基本的东西。 我用GCC4.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看不到函数名,我需要如何编译/运行它才能工作? Sleepy网站提供:

支持GCC/mingw。您现在可以使用嵌入的DWARF2数据分析可执行文件,它应该可以工作。这不需要特殊的选项,只需使用“-g”进行编译,以确保存在符号。您可能还希望使用“-fno ommit frame pointer”来确保正确的调用堆栈,尽管Sleepy通常会以任何方式工作。你不需要使用“-pg”或任何垃圾。它甚至可以将Microsoft DLL之间的正确堆栈转换为GCC DLL,这比您想象的要困难


但在我的例子中,这还不够。

通常我们使用以下参数调用very sleepy命令(或任何其他调试工具):

  • -O0
    :设置默认代码优化(用于减少时间或空间的优化代码可能会隐藏某些功能)
  • -g
    :它用于保留默认情况下被破坏的函数和变量的名称,以优化可执行文件,但会降低可调试性:
  • -fno省略帧指针
    :根据,它还通过使用帧指针(一种用于提高性能但使调试可读性降低的功能)来改进调试。使用该选项,输出汇编代码更加简单。这有助于调试器
  • -gdwarf-2
    :指定将其设置为强制输出调试格式为“dwarf2”。事实上,-g选项只是告诉编译器“保留一些信息”。gdwarf将指定输出格式(如果可能)
您还可以添加
-glevel
,以指示输出信息的精度。默认值为2。它不保留宏和一些定义。也许你可以把它设为3

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


我希望它将有助于

使用-gdwarf-2编译解决大部分问题;显然GCC4.8的默认版本是Drawer的更新版本,Sleepy无法阅读;仍然有一些无法识别的函数,但所有最昂贵的函数现在都已识别。我遇到了相同的问题,但无法解决它。我使用
-g-fno省略帧指针-gdwarf-2
或它们的任何组合,但与
g++4.8.3
一起使用时未成功。我是否遗漏了一些明显的东西?我已经有一段时间没有使用Sleepy了,但是尝试使用-gdwarf-2编译,而不使用-g。我认为-g意味着调试信息的格式,然后-gdwrf-2不会覆盖它。上面提到的想法都不适合我(使用gcc版本4.9.1(i686-posix-dwarf-rev2,由MinGW-W64项目构建))谢谢!参数的顺序是否也相关?特别是
-gdwarf-2
-g
,例如,因为
-g
可能触发不同的默认格式?将很快尝试测试,目前使用的
-O2
。另外,我使用的是CMake,因此,二进制文件最终位于与源代码并行的目录中。也许有必要提供一些目录非常困倦?(尝试了很多符号搜索路径但没有成功)@SebastianK:你找到解决我们问题的方法了吗?我遇到了一些问题。使用“-gstabs+”编译似乎有帮助:符号在我的exe中得到了解决(我的自定义DLL中仍然存在一些问题,这些问题是应用程序动态加载的QT插件)。