Jump to content

    

Подскажите, где почитать как наблюдать за переменными, памятью в дебуггере?

2 minutes ago, Димон Безпарольный said:

Я то думал что здесь знают что - то наиболее подходящее.

Ваш вопрос - очень общий, ни разу не конкретный. Поэтому и ответ на него аналогичный. Удивляться нечему :)

 

Share this post


Link to post
Share on other sites
4 minutes ago, Forger said:

Ваш вопрос - очень общий, ни разу не конкретный. Поэтому и ответ на него аналогичный. Удивляться нечему :)

Понял. Звиняюсь. Конкретизирую. Есть подозрение что в процессе выполнения кода разрушается память. Более конкретно здесь:

STM32L476 + SD. f_write выдает FR_DISK_ERR

https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=151901&tab=comments#comment-1624537

Можно ли дебаггером отловить кто пишет в конкретную область памяти. Вывести переменные и понаблюдать за их значением?

 

Где бы кроме гугла об этом почитать?

Edited by Димон Безпарольный

Share this post


Link to post
Share on other sites
3 minutes ago, Димон Безпарольный said:

Можно ли дебаггером отловить кто пишет в конкретную область памяти. Вывести переменные и понаблюдать за их значением?

Можно. Это есть в мануале, в частности тут

Share this post


Link to post
Share on other sites
7 minutes ago, Димон Безпарольный said:

О как. Спасибо.

Нашел в гугле за 3,75 сек.

Share this post


Link to post
Share on other sites
12 minutes ago, Димон Безпарольный said:

Не нашел ответа. Как в дебаггере вывести / узнать адрес начала этой структуры?

Шутите? 

Вспомните, как это делали в других средах, тут аналогично.

Share this post


Link to post
Share on other sites

Всем спасибо. Изучил, научился даже ставить break на изменение переменных. Нижайший поклон.

 

Помогла ссылка Viko

 

http://www.keil.com/appnotes/docs/apnt_230.asp?_ga=2.147416191.932417894.1557290765-121321346.1557290765

 

Раньше пытался обуздать Watch Window. Оказывается локальные переменные она видит только в останове. Поскольку они в регистрах.

Edited by Димон Безпарольный

Share this post


Link to post
Share on other sites
15 minutes ago, Димон Безпарольный said:

 Оказывается локальные переменные она видит только в останове.

Это вполне логично. Кто знает язык C на базовом уровне, тот понимает причину этого.

 

15 minutes ago, Димон Безпарольный said:

Поскольку они в регистрах.

Нда... случай запущенный :fool:

Share this post


Link to post
Share on other sites
16 minutes ago, Forger said:

Это вполне логично. Кто знает язык C на базовом уровне, тот понимает причину этого.

 

Нда... случай запущенный :fool:

Changing a local variable to a static or global normally means it is moved from a CPU register to RAM. CoreSight can view RAM but not CPU registers when the program is running.

Share this post


Link to post
Share on other sites
28 minutes ago, Димон Безпарольный said:

Changing a local variable to a static or global normally means it is moved from a CPU register to RAM. CoreSight can view RAM but not CPU registers when the program is running.

Это тот самый случай, когда работает поговорка: "смотришь в книгу, а видишь фигу". Случай действительно запущенный :)

 

Специально для такого случая: локальные переменные размещаются в стеке (если явно не пытаетесь использовать регистры), стек находится в RAM.

Почитайте про "область видимости переменных". Это есть в книге по С, где-то в базовых разделах, в самых азах.

 

В динамике (RUN) отладчик сможет видеть только глобальные переменные, т.к. их зона видимости - глобальная.

Делайте локальные переменные глобальными или копируйте их содержимое в другие глобальные, их и наблюдайте.

Подобные куски кода принято оформлять в конструкциях в стиле #ifdef DEBUG ... #endif 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now