9.2 - Debugging - GDB Tutorial

Sdílet
Vložit
  • čas přidán 6. 09. 2024

Komentáře • 161

  • @coudbook2177
    @coudbook2177 Před 3 lety +156

    Relevant gdb commands I've gathered over time:
    info gdb //Manual
    info locals //Vars in local scope
    info variables //Vars declared outside current scope
    info functions //Names and datatypes of all defined functions
    info b //List all breakpoints
    break funcName //Set breakpoint at function funcName (short: b funcName)
    break file::line //Set breakpoint at line in file
    layout next //Cycle through the layouts of gdb
    p var //Print the value of variable var
    p var = value //Force set value to a var
    run //Start the program
    start //Synonymous to (b main && run). Puts temporary b at main
    next //Execute the current line in source (short: n)
    step //Step into function call at current line (short: s)
    finish //Finish the execution of current function (short: fin)
    continue //Resume execution (After a breakpoint) (short: c)
    refresh //Repaint the interface (To fix corrupted interface)
    shell cmd //Run shell command cmd from gdb prompt
    python gdb.execute(cmd) //Run a gdb command cmd from python prompt
    set print pretty on //Enable pretty printing
    (Put in ~/.gdbinit)
    $ gdb -c core.num //Examine the dumped core file from a SIGSEGV(shell command)
    bt //Print backtrace
    break _exit //Breakpoint at exit of program
    whatis expr //Print datatype of expr
    ptype expr //Detailed print of datatype of expr
    watch var //Stop when var is modified
    watch -l foo //Watch foo loaction
    rwatch foo //Stop when foo is read
    watch foo if foo>10 //Watch foo conditionally
    delete //Delete all breakpoints
    delete breakpoint_no //Delete breakpoint breakpoint_no
    command breakpoint_no //Run user listed commands when breakpoint is hit
    (End list of commands with 'end')
    file executable //Load the executable for debugging from inside gdb
    quit //Quit (short: q)
    Feel free to correct/add any useful command you know.

  • @benbernardy9754
    @benbernardy9754 Před 5 lety +187

    Thank god for actual educators creating youtube tutorials! Thanks Chris!

  • @anonymousnoman5965
    @anonymousnoman5965 Před 5 lety +71

    one of the most under-rated gdb tutorial

    • @marcw6875
      @marcw6875 Před 2 lety

      Agreed. I've watched a few recently and they just move through it much too quickly. This one was a good pace and covered some nice basic functions.

  • @ir4640
    @ir4640 Před 5 lety +146

    " I wonder what's the sum of first ten million numbers?
    It's a segmentation faul"
    Lmao ded

  • @MMABeijing
    @MMABeijing Před 3 lety +7

    Going to college in useless, unless you get a teacher such as this gentleman. The best gdb introduction on the net, thank you guru

  • @embeddedbastler6406
    @embeddedbastler6406 Před 4 lety +40

    Finally a program with more bugs than mines.

  • @pedrolobo1081
    @pedrolobo1081 Před 4 lety +23

    2:14 If the compiler returns an error in the sqrt function, move the -lm flag to the end of the line. In this way: gcc -g -w -std=c99 primesProgram.c -lm

  •  Před 5 měsíci

    After 5 years, still the best and most detailed quick tutorial about GDB on CZcams.

  • @PhilippeCarphin
    @PhilippeCarphin Před 2 lety +1

    15:23 it took me so long to finally see it. Remembering that it gave the total of 29, I was pretty confident that it wasn't giving a wrong result because of uninitialized total.
    I looked it over many times and even read "total plus-equals arr[i]" every time I read it. Then when you showed it taking on each value in the array I looked at it again. Very cheeky.
    After you showed that the array was good, that total started out with the value 0, I paused the video and could absolutely not see the mistake.

  • @SuperSampling
    @SuperSampling Před 4 lety +13

    getPrimes returns NULL when compiling with gcc 9.2.0 which will lead to a segfault in the `sum` function at 11:56
    If you follow along the tutorial, change the line 54 in the initial version of the program to:
    _int *result = (int *)malloc(sizeof(int) * n);_
    and _free(primes);_ before returning from _main_

  • @earlr4039
    @earlr4039 Před 3 lety +4

    Thanks Dr. Bourke! I've been programming for over 30 years in C and was looking for a good gdb instructional vid to pass on to a Windows C programmer new to linux. Yours is the best I found. You hit on most of the common errors as well as some of the best practices. Kudos!

  • @trestenpool9045
    @trestenpool9045 Před 5 lety +14

    Best gdb tutorial I found, Thank you!

  • @raunakpillai13
    @raunakpillai13 Před 4 lety +8

    Thank you so much Chris, the way you walked us through the complete code and debugging was really helpful.

  • @zoeythebee1779
    @zoeythebee1779 Před 2 lety +2

    If *layout next* is only showing assembly, use the command *layout src* . And if that doesnt work add your source code directory with *directory ./your/source/files.cpp*

  • @Jackyskan
    @Jackyskan Před 2 lety

    Thanks for your video, it's helpfull because you show all the basic command that we need to know when we use GDB, but all the explanation you give to debug YOUR program it's not really the topic. Anway it helps me. Thank you

  • @santiagorestrepo2717
    @santiagorestrepo2717 Před 2 lety +1

    hands down best GDB video WOW so in depth and so much insight

  • @geekionizado
    @geekionizado Před 4 lety +2

    you or the person who wrote this code are very clever into thinking about multiple ways a person can write a buggy program and explain step by step
    I wish you had more subscribers. Please keep up with the good work!

  • @IronWill-men
    @IronWill-men Před 9 měsíci

    Explained like a true champion, very well through guide, thanks Chris

  • @ondrejsakala3980
    @ondrejsakala3980 Před 4 lety

    I have used gdb server first time. Good tutorial. Great thanks from Slovak Republic !

  • @anuradhaedachali
    @anuradhaedachali Před 4 lety

    I was getting No file executable error for sometime but referring to your video the issue is resolved. Thank you so much.

  • @Aaronb2245
    @Aaronb2245 Před 3 lety +2

    Thank you for sharing this! This has helped me decide to stay with using the terminal when writing C programs. I actually am preferring the gdb debugger from the terminal rather than in the IDE. Awesome!

  • @ahmadfaiq85
    @ahmadfaiq85 Před 4 lety

    Loved the layout next command. I didn't know you could see the code while stepping through.

    • @bonbonpony
      @bonbonpony Před 4 lety

      Yup, this should have been the default mode long time ago :q

  • @hefan2482
    @hefan2482 Před 3 lety

    例子设计的简单明了,对GDB入门真的很有帮助,谢谢!

  • @PeeterJoot
    @PeeterJoot Před 3 lety

    I didn't know the argv@2 trick to set the size of the array print out. Nice.

  • @suyashneelambugg
    @suyashneelambugg Před 4 lety +1

    surprisingly I had to use the -lm at the very end for the linker to work... at the standard position gcc -g -lm ...it gave me a linker error and failed to recognize sqrt on line 71.

  • @malusmundus-9605
    @malusmundus-9605 Před 2 lety

    Dude the keyboard clicks and voice... accidentally top-notch asmr.

  • @bonbonpony
    @bonbonpony Před 4 lety +3

    15:50 You're sure that the unary `+` operator "makes things positive"? :q If that would be the case, we wouldn't need the `abs` function :J The `+` operator just leaves whatever sign there is without any changes. So if the number was negative to begin with, it would remain negative; it won't flip to positive.

    • @starc0w
      @starc0w Před 2 lety +1

      Yes, very well noticed. The statement is not correct. A negative value does NOT become positive with the + sign.
      It is also NOT true that a value becomes negative with a - sign in front of it. The "-" causes a NEGATION of the value. If a number is already negative, a - sign makes it positive.

  • @bavishijimit
    @bavishijimit Před 5 lety +2

    Absolutely amazing video!

  • @Mnj3907
    @Mnj3907 Před 4 lety +2

    Thanks a lot Chris. This video is totally educative.

  • @manishgupta13
    @manishgupta13 Před 2 lety

    Just one word superb

  • @shararmahmood380
    @shararmahmood380 Před 3 lety

    I want to redo all my C assignments now. I was doing them sooo wrong the whole time. Dr. Bourke you rock!

  • @roeniss
    @roeniss Před 2 lety +1

    really good demonstration.

  • @rakibd.sarker300
    @rakibd.sarker300 Před 5 lety +1

    Great one for the beginner of GDB.

  • @cursedfox4942
    @cursedfox4942 Před 4 dny

    Liking gdb more and more

  • @liliaoakeley4402
    @liliaoakeley4402 Před 2 lety

    king of gdb

  • @qhfcwwfep4zn2kheg2fu8
    @qhfcwwfep4zn2kheg2fu8 Před 3 lety +3

    I doubt that it is sieve algorithm. It actually creates an array and marks all non primes as by marking all factors of new primes which you get while traversing the array.
    Nice tutorial though.

  • @user-de4mr7uk8d
    @user-de4mr7uk8d Před 2 lety

    Holy shit. Thank you so much! This lesson helped me a lot!!!

  • @SauvikRoy
    @SauvikRoy Před 2 lety +1

    Thank you for the awesome tutorial! I was hoping you'd show how to detect the memory leak in the end?!

  • @danverzhao9912
    @danverzhao9912 Před 3 lety

    Best gdb tutorial on youtube! Thank you!

  • @dhhan68
    @dhhan68 Před 3 lety

    Thanks a lot, teacher! I began to love gdb....

  • @aghorn
    @aghorn Před 4 lety +1

    Excellent tutorial. Thanks!

  • @3bonsai5279
    @3bonsai5279 Před 3 měsíci

    I will forever be haunted by the looming "=+" operator
    Also, I implemented my own algorithm. I think the total for 10,000,000 is 870,530,414,842,019. It still took 4m13.713s to calculate

  • @celsozacarias7285
    @celsozacarias7285 Před 4 lety

    I'm happy that I've found a good channel like your. Video liked and channel subscribed

  • @christiangiampapa5780

    Helped so much, incredibly grateful

  • @saeed6971
    @saeed6971 Před 4 lety +1

    Thank you kind sir. you explained it simple but in great detail.

  • @blameItleaveit
    @blameItleaveit Před 2 lety

    This is really great video.

  • @aditya-vt7po
    @aditya-vt7po Před rokem

    the examples used are good.

  • @noonansean1979
    @noonansean1979 Před 3 lety

    Great intro to GDB, thank you

  • @ermanolcay6574
    @ermanolcay6574 Před 2 lety

    Perfect presentation and teaching thank you for your work kudos.

  • @Jamespan4
    @Jamespan4 Před 3 lety

    Good tutorial, that's exactly what I am looking for!!!

  • @imrank340
    @imrank340 Před 3 lety

    Thank very illuminating tutorial n the technique demonstrated.

  • @adetolasanni007
    @adetolasanni007 Před rokem

    When I compiled multiple files for a program it only showing addresses and only the main function.

    • @adetolasanni007
      @adetolasanni007 Před rokem

      I am good now. I used list command to show the code. Thank you

  • @marrylo842
    @marrylo842 Před 4 lety

    Debugging is like heaven 😍

  • @thcdenton
    @thcdenton Před 2 lety

    awesome tutorial. been wondering how to do this :D

  • @nicolaspillot5789
    @nicolaspillot5789 Před 6 měsíci

    Great tutorial ; for completeness, would it be able to use gdb to debug the missing free of the malloc memory at the end ?

    • @ChrisBourkeUNL
      @ChrisBourkeUNL  Před 6 měsíci

      It would be better to use a dynamic analysis tool such as valgrind to detect memory leaks.

  • @hassansyed5661
    @hassansyed5661 Před 10 měsíci

    GDB seems a good debugger

  • @SO-dl2pv
    @SO-dl2pv Před 5 lety +1

    What a great tutorial!

  • @hstrinzel
    @hstrinzel Před rokem

    REALLY GOOD tutorial! Thank you! :)

  • @adetolasanni007
    @adetolasanni007 Před rokem

    Your tutorial is amazing.

  • @harryw5622
    @harryw5622 Před 4 lety

    Thank you so much for such clear tutorial!

  • @Gokulkrishnan-yg8yh
    @Gokulkrishnan-yg8yh Před 4 měsíci

    Thanks for the nice tutorial, Where should i get the presentation.

  • @abdulkadirbayero9140
    @abdulkadirbayero9140 Před 2 lety

    This tutorial is goated... That's why u the g.o.a.t

  • @kitsana72
    @kitsana72 Před 5 lety +1

    very helpful. Thanks!

  • @quangtuanphan6213
    @quangtuanphan6213 Před 2 lety

    thank you sir, awesome!

  • @cepi24
    @cepi24 Před 2 lety

    Sir, this is simply amazing. God bless you & your family. May I ask which playlist is this video part of?

  • @Popart-xh2fd
    @Popart-xh2fd Před 4 měsíci

    Isn't this placed in a playlist?

  • @baqtronic7704
    @baqtronic7704 Před 5 lety +1

    Great tutorial!! Thanks

  • @MrACrazyHobo
    @MrACrazyHobo Před 3 lety

    Such a great tutorial.

  • @ankitajain6563
    @ankitajain6563 Před 4 lety

    I have a problem when I wrote layout next then layout window is open but after write run then nothing is printed on layout window, so please help me what mistake I did

    • @ChrisBourkeUNL
      @ChrisBourkeUNL  Před 4 lety +3

      Unfortunately this is probably not enough information to go on. My guess would be that you didn't compile with the -g flag and so no code/symbols were available to GDB. You might ask a colleague or someone in person that would be able to observe the problem directly.

  • @athuldas6494
    @athuldas6494 Před 4 lety

    could someone help me out...I use windows and the layout next command isn't identified...can I do something about it...please do help

  • @anndronova521
    @anndronova521 Před 3 lety

    Very helpful tutorial!

  • @Dorbellprod
    @Dorbellprod Před 2 lety

    Thank you! This is a great resource.

  • @crooktsang4107
    @crooktsang4107 Před 2 lety

    Late but does anyone know how to fix "layout next" not showing source file after i do "backtrace full" at 19:28 ? Before this, i also put in the -g flag when i compiled with gcc.

  • @orionclachar5094
    @orionclachar5094 Před 2 lety

    how do you use step if there are multiple functions on a line. For instance I have been trying to use it in c++ where there is a cout statement that prints the result from a function in the stream. How do I step into that function without stepping into the cout function and getting lost there?

    • @ChrisBourkeUNL
      @ChrisBourkeUNL  Před 2 lety

      The stepi command may help (step 1 instruction at a time), though it may take several applications to get to the point you want to. If they are *nested* functions, you can simply set a break for the function itself.

  • @martinmickels1478
    @martinmickels1478 Před 4 lety

    I could not get up the code using "layout next". I compiled it in windows like "gcc -w -g -lm -std=99 -w -o debug_test.exe debug_test.c" and then I entered GDB with "gdb debug_test.exe". I ran the program first "r" and I also tried typing "layout next" first. The I tried compiling with "gcc -ggdb" also. Can someone tell me if I am doing this wrong?

  • @kgroombr
    @kgroombr Před 3 lety

    Well explained. Thank you!

  • @AlvaroLopez-rr2xz
    @AlvaroLopez-rr2xz Před 4 lety

    Thanks for the tutorial,so useful for beginners people in gdb.

  • @n0lain
    @n0lain Před 4 lety +1

    Which text editor is he using?

  • @foadsf
    @foadsf Před 4 lety +1

    this was awesome. I enjoyed every second. thanks a lot 🖖

  • @yahiafarghaly7472
    @yahiafarghaly7472 Před 4 lety

    Very elegant thank you

  • @NinjaAcademie
    @NinjaAcademie Před 3 lety

    Insane information thanks a lot

  • @matanonson4
    @matanonson4 Před 3 lety

    every time I want to print something (for example x) it says : "no symbol "x" in current context."
    do you know what is the problem?

  • @abheetl9743
    @abheetl9743 Před 4 lety

    This is brilliant.

  • @marrylo842
    @marrylo842 Před 3 lety

    I have question if anyone ever encountered it, I have 2 codes exactly same but when I debug one it works fine and the other doesn't, it's loops are not executed even when the code is same. Can it be compilation problem or something else?

    • @lindyrauchenstein8716
      @lindyrauchenstein8716 Před 3 lety

      I ran into the same problem running the exact same code with different compilers. One optimized the whole loop away and the other didn't. E.g. gcc on WSL and Ubuntu didn't run the loop body, but gcc on MinGW did.

  • @qamandarin1921
    @qamandarin1921 Před 4 lety

    Hi on layout next mode why when I press ENTER on the screen outputs "W", and it does not move to next line?

  • @Klayperson
    @Klayperson Před 3 lety

    at line 69 could you just `return x == 2;` ?

  • @charlybravo
    @charlybravo Před 4 lety

    Where can o get the program primesprogram.c ?Thanks in advance

  • @kartiksama5467
    @kartiksama5467 Před 5 lety +1

    Thanks a lot!

  • @rahulkhanna9870
    @rahulkhanna9870 Před 5 lety

    Great video

  • @carlosl5125
    @carlosl5125 Před 4 lety

    This is amazon thank you!

  • @dongdongkong9649
    @dongdongkong9649 Před 4 lety

    excellent

  • @akomevegnisewanou4705

    thank you so much. But i can't access the files for doing by myself. Is it possible to update the link please ?

    • @ChrisBourkeUNL
      @ChrisBourkeUNL  Před rokem

      Sorry, moved them last year; here's the link to the debugging hack for this course covered by this video: github.com/cbourke/ComputerScienceI/tree/master/hacks/hack-debugging

    • @akomevegnisewanou4705
      @akomevegnisewanou4705 Před rokem

      @@ChrisBourkeUNL Thanks

  • @sudarshanv9797
    @sudarshanv9797 Před 3 lety

    layout next is not working for me

  • @zoroshikamaru3038
    @zoroshikamaru3038 Před 7 měsíci

    Thank you

  • @hectorcanizales5900
    @hectorcanizales5900 Před 3 lety

    how did you download the text user interface (tui) for gdb?, because when i try to use the -tui flag when running gdb it does not work and outputs something like ```gdb.exe tui not supported```. I've read that if I don't have it installed, the command ```layout next``` does not work.

    • @lindyrauchenstein8716
      @lindyrauchenstein8716 Před 3 lety +1

      It was available for me in terminal in Ubuntu 18.04, in Windows Subsystem for Linux, and in Git Bash for Windows (which uses MinGW) but not available for me in MSYS MingGW. Ubuntu 18.04 and WSL I just installed gcc from apt-get and didn't do anything else special. Hope it helps!

    • @hectorcanizales5900
      @hectorcanizales5900 Před 3 lety

      @@lindyrauchenstein8716 thanks for the info!

  • @ishanvarade
    @ishanvarade Před 5 lety +1

    great

  • @chuian7978
    @chuian7978 Před 3 lety

    謝謝你~

  • @THHATKD
    @THHATKD Před 3 lety

    Let’s “fire up” 😂😂❤️👌🏼

  • @diyarparw8264
    @diyarparw8264 Před 3 lety

    Good tutorial, thank you! It did help me!

  • @anispinner
    @anispinner Před 2 lety

    23:41 it's been 4 years, still waiting for the result