This might be the worst thing about programming on a Mac.
HTML-код
- Опубликовано: 6 сен 2024
- Patreon ➤ / jacobsorber
Courses ➤ jacobsorber.th...
Website ➤ www.jacobsorbe...
---
This might be the worst thing about programming on a Mac. // I use a Mac and usually, I love it. But, sometimes it drives me crazy, mostly due to the fact that some tools aren't well supported. This video goes over a few that I find myself missing the most - specifically, GDB and Valgrind.
***
Welcome! I post videos that help you learn to program and become a more confident software developer. I cover beginner-to-advanced systems topics ranging from network programming, threads, processes, operating systems, embedded systems and others. My goal is to help you get under-the-hood and better understand how computers work and how you can use them to become stronger students and more capable professional developers.
About me: I'm a computer scientist, electrical engineer, researcher, and teacher. I specialize in embedded systems, mobile computing, sensor networks, and the Internet of Things. I teach systems and networking courses at Clemson University, where I also lead the PERSIST research lab.
More about me and what I do:
www.jacobsorbe...
people.cs.clem...
persist.cs.clem...
To Support the Channel:
+ like, subscribe, spread the word
+ contribute via Patreon --- [ / jacobsorber ]
Source code is also available to Patreon supporters. --- [jsorber-youtub...]
I once saw a post on LinkedIn saying how terrible and unusable Linux was because it didn't have all the debugging tools that Windows has. I almost died laughing.
The author of that article definately tried to download applications from google
i directly installed linux on my new laptop, it is just way better for programming, i don't have to use the windows api, i can install most of the libraries using my package manager, and i can use syscalls directly when writing in assembly
Sounds like you found an old install provided by shippit. Good luck.
@@jamess1787??
Linux is awesome but have some gaps. For instance when i want to use codeblocks for doing c/c++ stuff on my manjaro distro, the ui seems to be pretty broken
@@daneemark4266 don't use manjaro, it's a piece of crap... If u want arch derivatives use endeavour os instead.
I think it's because of the theme depending on if you use qt or gtk, you can change the one that isn't the main in the settings too
3:00 How do you seamlessly switch from a macOS terminal to a VM terminal for compiling and testing? Maybe a video on that setup would be helpful (I also find debugging a pain on macOS).
It's just a VScode feature, you saw him click on the other terminal.
you also have an extension on VScode for remote programming, you basically edit your source files on the VM and compile them there
I switched to linux more than a year now from mac it is a bit challenging sometimes, but it’s totally worth it ! Especially if you are interested in low level and system programming
I’ve been using a Docker container to run both of these tools on Mac with relatively low effort. Valgrind and GDB both work perfectly under Docker, would recommend giving it a shot.
Edit: albeit this is analogous to a VM, but from my experience, it’s oftentimes quicker and easier to setup than a full VM.
An M1 Mac adds another layer of pain. Docker containers saved my life.
Doesn’t Rosetta do all the work for you?
gdb needs to be digitally signed first, you need to create a certificate and then sign it; also you need to kill taskgated before starting gdb. this is how I got it to work on my Macbook pro 16
I think the solution Apple expects you to use is to use the Clang sanitizers. They are generally faster than Valgrind, with the trade-off being that you need to recompile the code you want to test. Either the memory or address sanitizer (I forget which) should be able to catch the double-free bug that Valgrind did here.
I've programmed C on the three OSes and personally found Apple to be the worst experience. I remember at one point having to figure out how to upgrade an outdated OpenSSL binaries to connect to a server and it was basically a exercise in futility to compile from source. POSIX on Windows can be a pain to setup, but its definitely a viable option as well.
What I was pleasantly surprised with was the relatively new Chrome OS to support a real Linux distro based on Ubuntu. VS Code is supported on it. So between the text editor, web browser and gnu terminal, it's a viable hobbist machine.
Objective-C anyone?
(Is it even still a thing?)
I was trying to find someone mention it ITS SO BAD like there’s so many cool apis on macOS that are locked behind objective c or swift
Don't apologize for not using Windows. It's pure pain for programming.
everything is pure pain for programming.
@@lordadamson can't be any more true😂
I suggest WSL for any Windows users out there. It's honestly a better developer experience than Mac OS at this point.
fr why the fuck is pip not in the path and python is py instead
@@bushidocodes My trade school actually used WSL to introduce people to Linux. Unfortunately only the bare basics were taught (navigation, ifconfig, etc), man was never mentioned, and we were expected to Google everything else.
The worst thing about using a MacBook for me is having to constantly justify why I like using a MacBook 😅
One thing everyone seems to agree on though is the MacBook good build quality. Any time I’ve tried out other laptops I notice little things like loose hinges, deck flex, screen flex, loud fans, backlight bleed, rough edges. It didn’t bother me before but now I can’t ignore it 😆
I've been programming 10 years now and never really use debugger. A lot of coworkers can't live without it but I think it encourages them to write hard to read code and to do too much in each iteration and undervalue fast startup.
Obviously not an answer to how to make these tools work in MacOS, but just a consideration that you may not need the debugger if you adopt a more iterative style. It's always easy to find a bug if it's in the last line of code you wrote. Takes forever if it's in the last 100 lines, and it shows when I pair with people, debugger and all.
I definitely agree that incremental development, especially paired with automated testing, makes debugging 100X easier, whether you are using a debugger or not. But, this assumes that I'm the only one writing code. If I'm working with a team, I can't necessarily control how they work. Also, sometimes bugs crop up without writing any lines of code. I might, for example, update a library that my code uses - some behavior changes in that library, and now my code doesn't work anymore. So, I'm hunting through all the code to figure out what broke.
That's the difference between coders (who just write stuff to spec) and programmers (who really know the deeper algorithms and understand how to develop complete systems).
I was under the assumption that Valgrind is essentially deprecated in favor of the various kinds of sanitizers available in modern compilers, which are available on macOS either way?
I switched to linux for the same reasons, and because it seems to get harder to figure out where libraries are on the system with every iteration of MacOS.
So why not use Linux full time then? :)
he said the reason at the beginning, honestly in terms of polish macOS shits on windows and linux, but i run linux still because it's that good when it comes to productivity and hackability that i am willing to forego over all polish
@@pushqrdx Zorin and Elementary OS
@@mrcrackerist Use a Mac and you'll know why Zorin and eOS are nothing in comparison, it's not just the look, it's a complete ecosystem of very high quality apps combined with a very polish and pretty system, super smooth scrolling and animations, macOS easily stomps both Windows and Linux in that regard, sadly that's where it ends as you're very limited in customization so if you don't like what's out of the box, get lost and so i did and am happily using Linux now
@@pushqrdx To me MacOS feels sluggish and unpolished with worthless animations.
As for apps I can't think of a single one that I would use in MacOS.
@@mrcrackerist if macOS is sluggish and unpolished then literally every other operating system is pure garbage
why are you not using normal editor
Hi, Jacob, would you recommend Mac as main machine for C++? Or problems with valgrind and GDB are crucial?
I know that there are workarounds, but what do you think?
I’ve written over a million lines of C code in the last 30 years in all 3 major OS. I’ve never used gdb or any kind of interactive debugger. Most of the code I write is semi-realtime so debugging interactively would completely change the behavior anyways. Instead I prefer plain old file logging and looking at the code. Hasn’t failed me yet. If I’m really in a pinch, valgrind is a good tool and I have used that from time to time.
Do you have a video on how to setup a Linux virtual machine on macOS?
This is the exact pain I faced after I switched to mac 6 months back. I messed up the keychain access for gdb but still no use. So, I used xcode for debugging on Mac. In a way I like it. But still not a perfect environment. I dont think xcode does all things that valgrind does.
I would be curious to see the code that fails when running normally and doesn't when using lldb.
Do you have any video on your kernel hacks?! Please share!
Using an x86 ubuntu docker image i was able to code x86 nasm on m1 mac, and gdb and valgrind work fine, however i noticed strace does not work
Not to mention that newer versions of macOS don't even ship with /usr/include anymore. You have to run some cryptic command after installing Xcode and Command Line Tools to get them and they disappear when you upgrade.
/usr/share exists. /usr/local/include exists. pkg-config also exists and works great. Stop hardcoding your include path strings.
/usr/include is the conventional location major compilers (including Apple Clang which ships with macOS) search for C standard library includes. This prevents the user from ever needing to hard code where these headers are. The user doesn't hard code this include path - it exists as a consistent location of these headers.
@@wile9763 You just proved my point. What does it matter if /usr/include is no longer present if the appropriate paths are searched for and libraries populated from other locations anyway?
Because they aren't present by default. That's what I am saying. macOS does not ship with the C standard includes by default.
I stans corrected: Macports has a version of valgrind that works in macOS >11. I am in heaven now.
When will valgrind be ported to Macos? seriously, we need this
The most annoying thing to me is the removal of 32 bit support, since so many old things still rely on it. I've enabled it on mine using kernel boot flags, and can now get simple 32 bit apps running, but nothing with a UI works, they all seem to have different crashes and I don't know what to do with it (which apple obviously doesn't care about since they only support 64 bit now).
So, I am taking a course where we are programming an Atmega16 in assembly….I currently use UTM to emulate windows but what other microcontrollers have a good dev environment on a mac?
Howdy all. Former OS GTA at GWU here. I heartily endorse Multipass for Mac OS users and WSL for Windows users. The SSH and WSL plugins for VSCode integrate really well with these tools, and you can keep your Linux dev environment lean and headless. Most of my former students were using one of these tools with VSCode and VSCode live share for remote pair programming on xv6 during remote learning. Not sure about how M1 support is coming along, but Multipass is from Cannonical and seems to have a good dev path. Docker is of course also an option.
Maybe address sanitizers can help? They sure help me a lot. Although sometimes valgrind really is a must.
I don't do low level stuff, but how do containers / just the docker environment work out for you? VSCode has remote containers and what not to connect to it.
The only time I programm on windows is when the University class requires me to do so. Most of the time this is because the (usually really bad) IDE is only on windows or the Linux/Mac version has something missing which is required. about halve a year ago I had to "code" in VHDL (FPGA Development is really fun) and while the IDE was available on Linux the tutor really recommended the windows version, I don't know why anymore.
I have a double whammy of a problem similar to yours, but its the with the M1 mac. Most things are not compiled for it, especially python packages. I have a arm-none-eabi-gdb running just fine on my mac, not sure about the intel one, but it definitely didn't work installing "gdb" through brew.
Edit, i use arm gdb for embedded systems, not OS programs, so not sure if it works for that.
I had trouble with VS on my Mac, possible tutorial coming soon?
Since you prefer Linux OS then you could program in to X11 using C? That will allow to demonstrate a new technique.
I miss so many tools from Linux like valgrind or kdgraph etc, I tried docker but it’s not a full solution
I’ve had decent experience on WSL (WSL2) on my Win-11 work laptop. I have a Mac and also run Linux on an old laptop and for me, WLS2 works pretty well in its terminal. BTW - love your videos!
In socket programming: Try to use accept() on macos, then connect around 200 workers with siege for example to your program, macos will simply not queue them for accpep() to dequeue them with each calls. On linux you can throw as many connection as you want on a socket, it will queue them up.
The worst thing, hands down, is Apples unrelenting refusal to obey any of the standards everybody else is following. Abandoning OpenGL, making Metal instead of supporting Vulkan, forcing Objective-C and its ecosystem, etc.
They suck and I would never give my money to them, just as bad as microsoft
Or just use Rust and appreciate the magic of the borrow checker. The compile error messages are so helpful it feels the compiler is alive.
Which Linux version do you use ?
I just use lldb on my 15” MBP (Big Sur) for basic debugging. I use a lot of packages from Brew without a problem on macOS, but I definitely agree. Linux is better for programming.
It’s a shame Valgrind doesnt really work
As a normie OS, macOS is one of the better ones for programming. Infinitely better than Windows. But when I want to get sh- done, Linux is the one
line 20 should allocate for sizeof(bool *)
Doesn’t Apple recommend XCode and its associated tools?
Of course they will, but Xcode is pretty bad tbh
Do you know what you're saying? Apple supporting open and free development tools? Not happening bro.
A guy can dream, can't he? 🙂
but what was the bug?
Just one thing: What to like at the user interface of a Mac? Window management, Finder and Dock are so ... basic... nearly crippled compared to anything you can get on Windows or Linux! I’m really curious
once you add Magnet, it gets quite good
- Workspace switching is fast and well integrated
- Global menu bar is nice for laptop screens
- Ability to use Adobe apps alongside a lot of Unix utilities & programming apps
- Dont need to install WSL or MinGW to port a Linux application.
- Works beautifully with 4k/hi dpi screens
@@IgnoreSolutions Not really, it is horrific. I use Rectangle, which I prefer, but still. So many oversights and problems, really.
no/minimal heat and fan noise.
Macs are never focused for programmers from the beginning. It has Unix under the hood and good graphical display which encourages programmers to use it for programming. Even if you see today, they would encourage us to use Swift but then most of the documentation pushes for the development of IOS apps rather than MacOS. Macs also deprecate libraries for example Opengl out of the blue inorder to push their own library which only works with Swift. This is very sad for the programming community.
Yeah docker or can’t you just compile them from source? I guess Mac has some sort of C/C++ compiler? 🧐
That's not how these things work. For example Apple hides some system libraries that valgrind needs for some functionality, so even though there is actually a valgrind version that you can install with homebrew for MacOS it doesn't have full functionality.
I was in the same situation between windows and linux.. I installed PopOS and now the only real reason I have windows installed is to play games.
You could start a project about programming a robot with ROS as it's a great opportunity for us to learn more about embedded systems and C/C++
But this all seems so complicated compared to simply using Visual Studio on Windows? I don't understand why I would not want to use a fully featured IDE like VS. I never have to use any terminal commands to compile anything or debug anything, it just breaks where an error happens, and the Visual Studio tools like the Debugger and Profiler are awesome.
Its complicated to you because you never used it. In reality it is far simpler once you learn how to use it. Command line tools are usually more powerful than their GUI counterparts, and they give you back far more information. The workflow is more streamlined because instead of having to go through a million GUI elements to find what you want, all you have to do is type. And this typing means that your hands will thank you when you reach your mid life or 3/4 life.
You never play games? :(
How about windows with wsl2?
Why not just Linux then?
It's the first time that I heard the term en.wikipedia.org/wiki/Heisenbug though I already had this kind of bugs.
Reminder to always enable -fsanitize=address for debug builds.
I absolutely could not live without gdb and valgrind. Luckily I can tolerate the slightly "rough around the edges" experience of daily driving linux
I think valgrind works on Mac, I can't remember if I had any trouble setting it up originally (couple of years back). I switch between Mac on a laptop and Linux on a desktop, pretty much got the same workflow on both, however I don't use gdb
@@atidyshirt valgrind 'works' but has many bugs on mac. It says hello world has leaks, for example.
@@junosoft oh ok, it worked alright for Uni last year, but this year I'm mostly on a Linux machine so not too sure
@@atidyshirt if you can make valgrind work flawless on a recent mac os, please tell me how so
@@atidyshirt Does not. At least not anymore
Gdb is not the best debugger but it's a cool hacker tool
Nothing is better than programming with resistors
I think it's registers
@@sudarshanv9797 no
@@arphenti2502 do you mean transistors?
@@arphenti2502 who programs with resistors? They are analog devices
Real programmers use butterflies. Everyone knows that.
I had a MBP went Linux. And I am happy with NixOS!
The problem is not the Mac is GDB itself, it sucks.
subscribed, heisenbug caught me off-guard.
I love macOS but this is annoying. GDB and Valgrind need to get on the Mac...
I only do memory leak tracking with valgrind on my linux box. For random segfaults and crashes, the address sanitizer and undefined behaviour sanitizer give brilliant and helpful info without valgrind.
“... is that it’s not Linux”
I am using in wsl on windows. 🙂
As soon as I saw the title I said "the worst thing is that valgrind stopped working", and the video didn't disappoint.
The Mac problem is simple. It runs Unix, which is aimed at servers and corporates. Leading edge developers need Linux for its support base and innovation.
The worse thing about programming on a MAC ?
Answer: You are on a MAC
I only use Linux as main driver.
Running directly it to hardware is what i prefer.
Linux for Life
Package the tools in a container
docker for MAC
How good Mac is too expensive for me!
You are the best
Keep goings-on in your work , and God blessed you 🙏
Solution: dont buy a mac. Buy a normal pc bc there you are free. You can have windows or linux there.
So, you're not using the tools that apple provides at no cost, and you're complaining that GDB doesn't work well? You know GDB is open source, right? Why don't you fix it?
I think somebody needs a hug.
@@JacobSorber Does that pass for a clever rejoinder in your social milieu?
It doesn't have Valgrind. That's my answer. - I'd way the f**k rather code on a Mac than a Windows system for sure. Linux, I could do. But I primarily write code *for* Apple platforms, so, yeah
^ This comment written before watching the video
hah, apple will force developer to use clang.
But you can install gcc with brew?
@@ndugar8540 will, they will.
Yeah, windows sucks. WSL helps in that you can ignore windows and just target POSIX compliant OSs (Linux, *BSD, MacOS).
Why don't you write a virtual CPU and port GCC and GDB to it so you can run the same test environment on every machine? It would also be a great teaching tool and debugging tool for millions of users. Write your CPU as a RISC-V.
"as soon as Apple fixes these issues" The issue is price. That is why almost all public places use computers with Windows. Look around at your local pharmacy, bank, hospital ect. You will not find Mac's there. And certainly not in India or other third world contries.
Never switch to Windows. Sorry, not Sorry!
dev containers
Only noobs need debuggers
Lol all the mac haters. 😂 Just like the hipsters who *must* have a mac. My only complaint is valgrind not working. Other than that, the hardware quality faaaar outweighs any minor annoyances of macos. I mean, if you’re going to do linux, then do Arch or something that really makes you have the linux ‘experience’ otherwise you are just using a worse posix environment. Haters gonna hate 😂😂
Linux all the way..
Ubuntuuuu...
1:15 *GNU/Linux
Not Apple's fault that you choose to stick to your stone knives and bearskins.
Windows is more advanced than Mac but less user-friendly, Linux is more advanced than Windows but less user-friendly than Windows. And yes, I have used all 3 of them. I grew up with Mac in the 90s and used Windows at friends houses at the time at the same time. I have installed and used a few Linux distros at several times in my life. Linux is extremely flexible, fast and stable but also very cumbersome and very little software runs on it. Do you want a lightning fast, very advanced and super safe car that can run on limited amount of roads? I rather use a mediocre OS that actually runs almost all consumer software. Mac is like a Ferrari, looks beautiful but you pay way, way to much for what you get. Buy the BMW's top model and you get the same if not higher quality car for much less money.
And it's not like you get underdog cred anymore for using mac.
@@1873Winchester Very true. I hate sitting in the shell for every task that is more advanced than double clicking an icon. Why can't they make a program that is a "system browser" an application where you do all of the most common tasks that you would do in the terminal". We are living in 2022 we shouldn't have to use terminals like that anymore. Terminal should only be for specific tasks that are impractical to do in GUI.
I see ranting about Apple, I automatically like, share, and subscribe. Although, I was already subscribed.
Also, good for not using windows, never use windows, real developers don't use windows.
Just embrace Linux Jacob!! Change all your computers and your family computers, and your students computers to Linux. Just tell your students, "if you aren't using Linux natively, not that VM or dual boot nonsense, you will automatically fail this class".
Thanks Nicholas! It seems that there's a version of valgrind that works. Haven't had a chance to try it out yet, but the repo is here if you are interested (github.com/LouisBrunner/valgrind-macos )
Need space before closing ) since as of now it's a dead link.
@@brianngetich007 nice observation dude,