我是新来的,所以可能会丢失一些基本的东西。 我用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] 举报,一经查实,本站将立刻删除。