我想将我编译的目标代码连接到C++代码,然后检查是否执行了某行代码。 如何做到这两件事?如何编写简单的调试器?
如果解释不是简单的(我敢打赌它不是),至少有人能指出一些网页解释如何做到这一点?
据我所知,该解决方案是针对不同平台的不同,但我感兴趣的是如何在Windows和Linux(Linux的启动)完成
我想将我编译的目标代码连接到C++代码,然后检查是否执行了某行代码。 如何做到这两件事?如何编写简单的调试器?
如果解释不是简单的(我敢打赌它不是),至少有人能指出一些网页解释如何做到这一点?
据我所知,该解决方案是针对不同平台的不同,但我感兴趣的是如何在Windows和Linux(Linux的启动)完成
gdb的源代码容易理解吗? – Calmarius 2013-08-23 12:24:25
在你的评论说:“我只是想收集关于如何执行过程中检查哪些方法/执行功能的信息,以及有多少次”。
如果这是您想要实现的目标,那么使用诸如gprof的分析器。
用-g -pg编译你的程序,当你的程序结束时它会创建一个可以由gprof处理的文件来显示你想要的内容。
没错,但我想从我的应用程序中完成 - 无需编译库或带有其他选项的程序(-pg为gcc)。 – 2011-04-18 13:09:25
我怀疑你并不是真的需要一个调试器,而是一个探查器。我喜欢http://valgrind.org/docs/manual/cl-manual.html的callgrind,它有一个很好的图形环境http://kcachegrind.sourceforge.net/。
要尝试我会使用
$ valgrind --tool=callgrind ./myapp
$ kcachegrind callgrind.out.xxx
这不是我真正想要的,但valgrind是开源的。所以,谢谢你的提示:) – 2011-04-18 13:10:08
为什么不直接使用现有的调试器? – Erik 2011-04-18 11:19:39
@Erik我知道调试器非常复杂,我不想创建一个。我只想收集有关如何检查在执行过程中执行哪些方法/函数以及执行多少次的信息。 – 2011-04-18 12:05:59
“编译目标代码”是什么?根据你的控制级别,它可能就像在你想知道的代码行之前/之后添加printf()语句一样简单。或者,您可能想要了解如何覆盖您选择的平台上的功能(有时称为混搭)。在很多平台上,你可以用你自己的函数替换链接器表中的函数的条目,做你的printf,然后把它叫做原文。在最坏的情况下,您也可以用跳转指令替换函数的第一条机器指令。 – uliwitness 2015-11-28 13:50:41