Платформо-независимый способ выгрузки Vars на экран - PullRequest
0 голосов
/ 24 июня 2011

Существует ли какой-либо независимый от платформы способ сброса переменных, созданных вашей программой, на экран?скажем, я пишу программу

#include <iostream>

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

int main(){
    f();
}

Есть ли способ получить internal_data без добавления std::cout/std::stream в f()?я хочу вывести все данные из моей программы, которая довольно велика, и я не хочу переходить на все остальные строки и помещать std::cout.как это делают отладчики?

я ищу способы сделать это в c ++

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

Эмм ... "без добавления std::cout / std::stream" - это нонсенс, если вы хотите что-то вывести, просто сделайте это.Отладчики работают с магией, а именно проверяют ваш процесс и все, и имеют символы отладки для вашего процесса, которых у вас нет.

Edit : Конечно, это может быть верно только для C ++,поскольку Python является несколько интерпретируемым языком, вы можете справиться с этим.Поскольку у меня нет никакого опыта работы с Python, я не могу это комментировать.:)

0 голосов
/ 24 июня 2011

Вопрос был о питоне и с ++, но изменился только на с ++ ??

В Python вы можете печатать каждую вещь на globals() или locals() и, если объектэто экземпляр класса, который не имеет представления ваших данных, просто напечатайте атрибут __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__)

, тогда вы делаете:

show(globals()) #or show(locals())

Возможно, вы захотите отфильтровать больше случаев, но этоосновной алгоритм.

...