平台独立的方式将vars转储到屏幕上

时间:2011-06-23 21:18:52

标签: c++ memory dump

是否有任何平台无关的方式将程序创建的变量转储到屏幕上?说我写程序

#include <iostream>

void f(){
    std::string interal_data = "hello world";
}

int main(){
    f();
}

在没有向internal_data添加std::cout/std::stream的情况下,有没有办法让f()出局?我想输出我的程序中的所有数据,这是非常大的,我不想去其他所有行并放置std::cout。调试器如何做到这一点?

我正在寻找在c ++中执行此操作的方法

2 个答案:

答案 0 :(得分:3)

嗯...“没有添加std::cout / std::stream”是无稽之谈,如果你想输出一些东西,就去做吧。调试器使用魔法,即检查您的进程和内容,并为您没有的进程调试符号。

编辑:当然,这可能只适用于C ++,因为Python是一种有点解释的语言,所以你可以用它来实现。由于我对Python没有任何经验,我不能对此发表评论。 :)

答案 1 :(得分:0)

问题是关于python和c ++,但只改为c ++?

在Python中,您可以打印globals()locals()上的所有内容,如果对象是没有数据表示的类实例,则只需打印{{1}里面的属性。即递归印刷每件东西。

伪代码:

__dict__

然后你做:

def show(obj):
    if isinstance(obj, (int, float, ...default types...)):
        print obj

    if isinstance(obj, dict):
        for i,j in obj.items()
            print i, show(j)

    else:
         show(obj.__dict__)

您可能希望过滤更多案例,但这是基本算法。