2013-12-24 3 views
1

Я ищу «посмотреть» программу по мере ее выполнения. Я хочу, например, отслеживать указатель стека программы, поскольку он изменяется через выполнение. Я рассматривал скрипты GDB с помощью python, но решения для этого очень затруднительные - до сих пор я не был успешным при установке PythonGDB. Если у кого-нибудь есть какие-либо решения/рекомендации относительно того, как подойти к этой проблеме, я был бы очень благодарен.После выполнения программы

EDIT: Я должен был упомянуть, я хочу записать эти значения - идеально автоматически - чтобы иметь возможность просматривать их впоследствии. Я понимаю, что GDB позволяет мне проходить через программу и просматривать каждое состояние, но я хочу автоматизировать этот процесс, чтобы «наблюдать» за тем, как определенные значения (такие как SP) меняются со временем.

+0

Вы можете найти интересный инструмент визуализации [Online Python Tutor programizer] (http://www.pythontutor.com/visualize.html#). Хотя я полагаю, что это полезно только для программ, которые могут вписываться в текстовое поле. – Kevin

ответ

0

ubiQ,

Я всегда использовал IDLE для отладки. Сделайте поиск в Google. Надеюсь, это поможет, если нет, дайте мне знать!

+0

Привет, Xanesis, я обновил свое оригинальное сообщение, чтобы отразить это, но то, что мне нужно, - это способность записывать определенные значения автоматически (например, SP) по мере выполнения программы, это позволит мне посмотреть, как состояние этих значения со временем меняются. Есть ли у IDLE такие возможности? – ubiQ

+0

Я так считаю, что в любое время он дает вам список всех, если переменные и их значения в программе. Надеюсь это поможет! – xanesis4

1

Это SystemTap решение для тестовой программы с отладочной информацией:

программы

Первый тест C++ (построен с г ++ -g main.cpp):

>cat main.cpp 

void a() 
{ 
    char arr[12800]; 
} 


void b() 
{ 
    char arr[1280]; 
    a(); 
} 


void c() 
{ 
    char arr[128]; 
    b(); 
} 

int main() 
{ 
    char arr[12]; 
    c(); 
    return 0; 
} 

Тогда сценарий Systemtap:

>cat measure_f.stp 
probe process("a.out").function("*") 
{ 
    printf("%-10s: rbp:%x, rsp:%x, %d\n", probefunc(), register("rbp"), register("rsp"), register("rbp") - register("rsp")) 
} 

Тогда тест сам по себе:

>sudo stap measure_f.stp -c ./a.out 
main  : rbp:7fffd3707a10, rsp:7fffd3707a00, 16 
c   : rbp:7fffd37079f0, rsp:7fffd3707970, 128 
b   : rbp:7fffd3707960, rsp:7fffd3707460, 1280 
a   : rbp:7fffd3707450, rsp:7fffd37042c8, 12680 
Смежные вопросы