Board logo

标题: [其他] 求教: C++ 调试时,参数跟踪问题-把问题重又解释了一下 [打印本页]

作者: snowgirl    时间: 2008-1-10 15:33     标题: 求教: C++ 调试时,参数跟踪问题-把问题重又解释了一下

重新解释一下:
在程序运行时,我想跟踪某一个参数的变化过程。比如全局变量x初始值是0.1,该参数被子程序A,B,C,D,E,等多次调用, 其过程中该值也在变化。 我只想跟踪一下这个参数的运行路径和参数变化过程。 这样说,是否表达清楚了呢? 我知道有这种功能,可是不会阿

如果把程序完整运行一次,在下面的debug里是可以看到这个参数的情况,可是那耗时太久了,觉得这种方法不可取。

我用的是Visual studio。



多谢楼下各位答复!

[ 本帖最后由 snowgirl 于 2008-1-11 10:05 编辑 ]
作者: sagood    时间: 2008-1-10 17:23

什么IDE啊?
作者: fussspur    时间: 2008-1-10 20:25

vc++ 在分步调试的过程中,应该会在窗口下方显示所存在变量的值吧。
作者: 古道视野    时间: 2008-1-10 21:44

LZ,要看你在什么样的环境下调试你的C++代码。

1. Unix/Linux 工具下可以使用比如:DDD调试工具,设定你需要的参数可以进行跟踪。
2. Visual Studio 环境下就更方便了,Debug的每一步都可以看你需要的参数数值的变化。

希望以上信息对你有所帮助。
作者: snowgirl    时间: 2008-1-11 10:06

多谢楼上各位!

还是没弄出来
作者: 橙色坦克    时间: 2008-1-11 11:38

请问什么叫观察参数的运行路径?Visual Studio里面集成的Debugger在设置断点的时候是可以设置条件的,比如当某参数值大于特定值时才停止运行,这样可以免掉每次守着断点看参数的当前值。

另外还有给Visual Studio的Profiler,它可以完成一些Debugger完成不了的功能,比如统计在整个程序运行过程中,一个while-loop运行了多少次等等。我觉得你说的功能可能可以由某个Profiler实现,但Visual Studio的Profiler不是集成的,也不是微软开发的,要另外去买许可证。
作者: snowgirl    时间: 2008-1-11 13:45

比如,程序大致运行顺序 如下

Subrutine  A      
Subrutine  B      调用参数x并重新赋值
Subrutine  C
Subrutine  D      调用参数x并重新赋值
Subrutine  F
Subrutine  C
Subrutine  D      调用参数x并重新赋值
......
Subrutine  M
Subrutine  P      调用参数x并重新赋值
end

不需要考虑子程序实际运行顺序,只要我能直接清楚地看到参数x走到Subrutine B,然后到 Subrutine D, 然后又Subrutine D.....P,就可以了.

其实是想跟踪该参数在程序中的被调用情况和数值变化情况。
作者: m2p    时间: 2008-1-11 16:15

一个可能比较笨的办法,在你调用x的后面加一个输出个语句,包含需要的信息及提示,然后DEBUG时在菜单View --> Output里面观察。再好一点就是直接把输出信息存到文件里。等测完了在把这些附加的CODE删除掉。
作者: m2p    时间: 2008-1-11 16:35

看到另外一种,在你要调用那个变量上 Insert tracepoint (就在insert breakpoint 下面),然后在打开的窗口 Print a message 写入你需要的信息,这里可以把function的名称都掉出来,debug时就可以在output窗口观察了。只是好像每一个调用这个变量的语句都要加这么一个tracepoint。

[ 本帖最后由 m2p 于 2008-1-11 16:37 编辑 ]
作者: nnacht    时间: 2008-1-11 16:36

用#ifdef进行条件编译,正式版本时不编译就行了。
作者: snowgirl    时间: 2008-1-11 16:43

Etage 9 : das ist richtig, aber das ist keine Funktion der Software, nur eine Strategie vom Arbeiter. ich erinnere mich daran, dass Visual studio diese Funktion hat.
Etage 10: 用#ifdef进行条件编译,正式版本时不编译就行了。  
               wie?  ich kann nicht. :gawp:


danke sehr!

[ 本帖最后由 snowgirl 于 2008-1-11 16:53 编辑 ]
作者: sagood    时间: 2008-1-11 18:17

try when debugging add watch for the varient x
作者: Flea    时间: 2008-1-11 19:00

Ausgabe in log Datei




欢迎光临 人在德国 社区 (http://csuchen.de/bbs/) Powered by Discuz! 7.2