gpt4 book ai didi

windows - Very Sleepy 在捕获 MinGW 编译文件时看不到函数名称

转载 作者:可可西里 更新时间:2023-11-01 12:32:19 24 4
gpt4 key购买 nike

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

然后我运行它并使用 Very Sleepy 捕获它。一切正常,但 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 看不到函数名称,我需要如何编译/运行才能使其工作?昏昏欲睡的网站提供:

Support for GCC/mingw. You can now profile executables with embedded DWARF2 data and it should work. No special options are required for this, just compile with “-g” to make sure you have symbols present. You may also wish to use “-fno-omit-frame-pointer” to ensure correct callstacks, although Sleepy will generally work either way. You don’t need to use “-pg” or any rubbish. It can even walk correct stacks between a Microsoft DLL into a GCC one, which was harder than you’d think.

但这对我来说还不够。

最佳答案

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

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

也可以加一个-glevel来表示输出信息的精度。默认为2。它不保留宏和一些定义。也许你可以将它设置为 3。

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

希望对你有帮助

关于windows - Very Sleepy 在捕获 MinGW 编译文件时看不到函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18969178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com