2012-04-19 4 views
1

У меня проблема при использовании watch в gdb. Я пытаюсь сохранить часы по переменной m в моем коде. Но по некоторым причинам я получаю следующее сообщение no symbol m in current context. Я сохранил точку разрыва в строке 7, так что область видимости m известна.установка Watch in GDB не работает для меня

steps performed by me :- 
    1>g++ -g a.cpp 
    2>gdb a.out 
    3>(gdb)break 7 
    4>(gdb)watch m 

Ниже моя программа: -

# include<iostream> 
    # include<stdio.h> 
    using namespace std; 

    int main() 
    { 

     int m=10; 
     char *abc = (char *)"ritesh"; 
     cout << abc << endl ; 
     m=11; 
     m=13; 
     abc=NULL; 
     cout << *abc <<endl; 

    return 0; 
    } 

Я также видел How can I use "watch" GDB? Но это не помогло мне много. Может кто-нибудь объяснить эту проблему я facing.Below является информацией, связанной с моей GNU

[email protected]:~$ gdb a.out 
    GNU gdb (Ubuntu/Linaro 7.3-0ubuntu2) 7.3-2011.08 
    Copyright (C) 2011 Free Software Foundation, Inc. 
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
    This is free software: you are free to change and redistribute it. 
    There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
    and "show warranty" for details. 
    This GDB was configured as "i686-linux-gnu". 
    For bug reporting instructions, please see: 
    <http://bugs.launchpad.net/gdb-linaro/>... 
    Reading symbols from /home/ritesh/a.out...done. 

ответ

2

При загрузке вашей программы в отладчик он не запустить еще. Тем не менее, вы пытаетесь посмотреть символ, который начнет «жить» в функции - main() функция - и «исчезнет», когда вы вернетесь из функции.

Например, в этом коде

void func() { 
    int b = 1; 
    ++b; 
    cout << b << endl; 
} 

int main() { 
    int a = 1; 
    func(); 
    cout << a << endl; 
} 

вы не можете установить часы от стоимости a до начала выполнения программы, и часы на величину b, пока исполнение не входит func().

+0

Должен ли я запускать его, как (mdb), и когда его следует выполнять? – Invictus

+0

да, 1) 'break' 7; 2) 'run' (отладчик останавливается в основном); 3) 'watch m'; 4) 'cont' (отладчик остановится после' m = 11') – pwes

+0

Сделано, я запустил программу после фразы и сохранил часы для переменной, и она была успешной благодаря большому – Invictus