If you are debugging a programming with gdb and want to see the call stack, and the call stack is really big (spanning the whole page), it makes sense to see only the top (innermost) 5-6 stack frames rather than the entire stack.
(gdb) backtrace #0 0x00007ffff7bc2620 in thirdPartyFFTransform () from ./liblzo2.so #1 0x00007ffff7108e43 in useMD5Checksum (karlCoef=0x7ffff2cd0ff0, ffCoef=0x7ffff2cd10c0) at ThirdParty/HardFFTrf.c:99 #2 0x00007ffff71091d5 in FastCheckSum (gamma=3426, delta=0x7ffff730e4c8 <acc_no> "x^2+5y ", capillaryRise=0x7ffff2cd1120, pCheckSumList=0x7ffff2cd10c0) at ThirdParty/HardFFTrf.c:152 #3 0x00007ffff7107349 in compute_fourier (gamma=40127, delta=0x7ffff2cd1120, CoefA=0x7ffff2cd123a) at ThirdPartyFF.c:1125 #4 0x0000000000491c6e in example::MathCalculator::FastFourierHelper::getCoefficient(FastFourier::Coefficient const*) () #5 0x0000000000492a44 in example::MathCalculator::FastFourierHelper::createFFDescriptor(std::vector<example::MathCalculator::ComputeIterationN*, std::allocator<example::MathCalculator::ComputeIterationN*> > const&, int) () #6 0x0000000000478767 in example::MathCalculator::FTransform::FTransform(example::MathCalculator::MessageQueue<example::MathCalculator::QMessg, 1024ul>*, example::MathCalculator::MessageQueue<example::MathCalculator::QueueMessage, 1024ul>*, std::vector<example::MathCalculator::ComputeIterationN*, std::allocator<example::MathCalculator::ComputeIterationN*> >&, example::MathCalculator::Accumulator*) () #7 0x0000000000474f23 in example::MathCalculator::MathEngine::createJobFactory(FastFourier::EquationDescription*) () #8 0x0000000000476856 in example::MathCalculator::MathEngine::processQueue() () #9 0x00000000004770b1 in example::MathCalculator::MathEngine::checkAssignments() () #10 0x00000000004a7d2e in example::MathCalculator::MathComputeEngine::Calculate() () #11 0x000000000046072c in example::MathCalculator::MMain::runMathLibThread(int) () #12 0x00007ffff7787b53 in thread_proxy () from ./libboost_thread.so.1.48.0 #13 0x00007ffff5ecadc5 in start_thread () from /lib64/libpthread.so.0 #14 0x00007ffff63de73d in clone () from /lib64/libc.so.6 (gdb) (gdb) (gdb) bt 4 #0 0x00007ffff7bc2620 in thirdPartyFFTransform () from ./liblzo2.so #1 0x00007ffff7108e43 in useMD5Checksum (karlCoef=0x7ffff2cd0ff0, ffCoef=0x7ffff2cd10c0) at ThirdParty/HardFFTrf.c:99 #2 0x00007ffff71091d5 in FastCheckSum (gamma=3426, delta=0x7ffff730e4c8 <acc_no> "x^2+5y ", capillaryRise=0x7ffff2cd1120, pCheckSumList=0x7ffff2cd10c0) at ThirdParty/HardFFTrf.c:152 #3 0x00007ffff7107349 in compute_fourier (gamma=40127, delta=0x7ffff2cd1120, CoefA=0x7ffff2cd123a) at ThirdPartyFF.c:1125 #4 0x0000000000491c6e in example::MathCalculator::FastFourierHelper::getCoefficient(FastFourier::Coefficient const*) () (gdb) (gdb) (gdb) bt -4 #11 0x000000000046072c in example::MathCalculator::MMain::runMathLibThread(int) () #12 0x00007ffff7787b53 in thread_proxy () from ./libboost_thread.so.1.48.0 #13 0x00007ffff5ecadc5 in start_thread () from /lib64/libpthread.so.0 #14 0x00007ffff63de73d in clone () from /lib64/libc.so.6
Stack frames
Consider the following stack dump
(gdb) backtrace
#0 0x0000000000401449 in autoPtrExample (rm=3) at MultiUseHeader.hpp:81
#1 0x0000000000401254 in registerQuickExitHandlers (k=3, comment="called from main") at MultiUseHeader.hpp:66
#2 0x00000000004015aa in registeringExitHandlers () at samAutoPtr.cpp:22
#3 0x0000000000401610 in main () at samAutoPtr.cpp:30
(gdb) backtrace -2
#2 0x00000000004015aa in registeringExitHandlers () at samAutoPtr.cpp:22
#3 0x0000000000401610 in main () at samAutoPtr.cpp:30
(gdb) bt 2
#0 0x0000000000401449 in autoPtrExample (rm=3) at MultiUseHeader.hpp:81
#1 0x0000000000401254 in registerQuickExitHandlers (k=3, comment="called from main") at MultiUseHeader.hpp:66
(More stack frames follow...)
You can select your frame of interest using the frame command.
(gdb) frame 0
#0 0x0000000000401449 in autoPtrExample (rm=3) at MultiUseHeader.hpp:81
81 cout << "Printing Rollno: p " << m->roll << " q " << n->roll << "\n"; // <- Seg fault
(gdb) frame 1
#1 0x0000000000401254 in registerQuickExitHandlers (k=3, comment="called from main") at MultiUseHeader.hpp:66
66 autoPtrExample(3);
(gdb)
Similarly to traverse one frame in either direction one at a time use the up/down command
(gdb) up
#2 0x00000000004015aa in registeringExitHandlers () at samAutoPtr.cpp:22
22 registerQuickExitHandlers(3, "called from main");
(gdb) up
#3 0x0000000000401610 in main () at samAutoPtr.cpp:30
30 registeringExitHandlers();
(gdb) up
Initial frame selected; you cannot go up.
(gdb) down
#2 0x00000000004015aa in registeringExitHandlers () at samAutoPtr.cpp:22
22 registerQuickExitHandlers(3, "called from main");
(gdb) down
#1 0x0000000000401254 in registerQuickExitHandlers (k=3, comment="called from main") at MultiUseHeader.hpp:66
66 autoPtrExample(3);
(gdb) down
#0 0x0000000000401449 in autoPtrExample (rm=3) at MultiUseHeader.hpp:81
81 cout << "Printing Rollno: p " << m->roll << " q " << n->roll << "\n"; // <- Seg fault
(gdb) down
Bottom (innermost) frame selected; you cannot go down.
To see the arguments passed in a particular frame use the info args command once the frame of interest is selected
(gdb) frame
#0 0x0000000000401449 in autoPtrExample (rm=3) at MultiUseHeader.hpp:81
81 cout << "Printing Rollno: p " << m->roll << " q " << n->roll << "\n"; // <- Seg fault
(gdb) up
#1 0x0000000000401254 in registerQuickExitHandlers (k=3, comment="called from main") at MultiUseHeader.hpp:66
66 autoPtrExample(3);
(gdb) info args
k = 3
comment = "called from main"
(gdb)
To see the local arguments of the selected frame use the info locals command to print the variables:
(gdb) info locals
filename = "./StateWisePopulationRecord.csv"
(gdb)