I am using uVision 4.21 MDK_ARM to learn how to program C++ on MCB1700.
I have create a new project and add 2 files (startup_CPL17xx.s / system_LPCxx.c) to startup group. Then I add main.cpp to Sources Files group. The project options are:
Device: LPC 1768 Target: Default Output: Default Listing: Default User: Default C++: Default Asm: Default Linker: Default Debug: Use ULINK Cortex Debugger Utilities: Default
Then I change the startup_LPC17xx.s Stack Size: 0x0000 1000 Heap Size: 0x0000 1000
My main.cpp code:
#include <vector> #include <string> int main (void) { int i = 0; int sum = 0; std::vector<int> vInt; std::string str = "Hello, C++"; vInt.push_back(1); vInt.push_back(2); vInt.push_back(3); vInt.push_back(4); vInt.push_back(5); sum = vInt.size(); sum = 0; for(i=0; i<5; i++) { sum += vInt[i]; } while(1); //return 0; }
I build the project successfully and download it to MCB1700 board "OK". Then I hit "F9" to set break point at line "vInt.push_back(1);". After I select Debug->Start Debug Session, the break point is not reached even I hit "F5" many times. Why?
By the way, I find there are 2 windows: Disassembly Window and Code Window (for main.cpp). How could I step through the code on C++ source code level and how could I step through the code on Assembly level?
This time I remove the main.cpp, and add file main.c with all other same.
The main.c
int main (void) { int i = 0; int sum = 0; for(i=0; i<10; i++) { sum = sum + i; } i = sum; while(1); //return 0; }
I can reach the break point. But after I add variables "i" and "sum" to Watch 1 windows and hit "F10" to step over the code. I can not see the i/sum value (the value show "<out of scope>".
So my questions are: 1. Why C++ code can not run to the break point? 2. Why I can not see the variables value?
Thank you for your reply.
After I read your post, I have tried your suggestion by start debugger first (set Run to main()) and then set the break point by "F9". I can see the break point is set. But when I hit "F5" or "F10", still can not see code run.
To answer your second question: set the cursor in the Disassembly window to step at the assembly level, set it in the source window to step at the source level. You can also close the Disassembly window and then it will step source.
The first question is hard to answer without seeing exactly what's going on in your debugger. One trap I fell in a few times is having simulation selected instead of the actual hardware debugger. Make sure "Use simulator" isn't selected in "Options|Debug".
Also, make sure no optimizations are switched on in "Options|C/C++" (-O0) - that makes it a lot easier to do source-level stepping.
Once you have that try stepping through your entire program instead of trying to set a breakpoint.
Also, I would set breakpoints after going into debug mode to be sure they really get set.
Andrew
View all questions in Keil forum