Reputation: 513
How to install gdb (debugger) in Mac OSX El Capitan ? I have tried installing gdb but failed couple of time.
I was following this URL : http://ntraft.com/installing-gdb-on-os-x-mavericks/ , MAC doesnot allow to install MacPorts.
Could anyone please help me in this regard.
Upvotes: 41
Views: 108706
Reputation: 17431
Here's a blog post explains it very well:
http://panks.me/posts/2013/11/install-gdb-on-os-x-mavericks-from-source/
And the way I get it working:
Create a coding signing certificate via KeyChain Access:
1.1 From the Menu, select KeyChain Access > Certificate Assistant > Create a Certificate...
1.2 Follow the wizard to create a certificate and let's name it gdb-cert
, the Identity Type is Self Signed Root, and the Certificate Type is Code Signing and select the Let me override defaults.
1.3 Click several times on Continue until you get to the Specify a Location For The Certificate screen, then set Keychain to System.
Install gdb via Homebrew: brew install gdb
Restart taskgated
: sudo killall taskgated && exit
Reopen a Terminal window and type sudo codesign -vfs gdb-cert /usr/local/bin/gdb
Upvotes: 13
Reputation: 3638
Please note that this answer was written for Mac OS El Capitan. For newer versions, beware that it may no longer apply. In particular, the legacy option is quite possibly deprecated.
There are two solutions to the problem, and they are both mentioned in other answers to this question and to How to get gdb to work using macports under OSX 10.11 El Capitan?, but to clear up some confusion here is my summary (as an answer since it got a bit long for a comment):
Which alternative is more secure I guess boils down to the choice between 1) trusting self-signed certificates and 2) giving users more privileges.
If the signature alternative is used, disabling SIP to add the -p option to taskgated
is not required.
However, note that with this alternative, debugging is only allowed for users in the _developer
group.
Using codesign to sign using a cert named gdb-cert
:
codesign -s gdb-cert /opt/local/bin/ggdb
(using the MacPorts standard path, adopt as necessary)
For detailed code-signing recipes (incl cert creation), see : https://gcc.gnu.org/onlinedocs/gcc-4.8.1/gnat_ugn_unw/Codesigning-the-Debugger.html or https://sourceware.org/gdb/wiki/BuildingOnDarwin
Note that you need to restart the keychain application and the taskgated service during and after the process (the easiest way is to reboot).
As per the answer by @user14241, disabling SIP and adding the -p option to taskgated
is an option. Note that if using this option, signing the binary is not needed, and it also bypasses the dialog for authenticating as a member of the Developer Tools group (_developer
).
After adding the -p option (allow groups procmod and procview) to taskgated you also need to add the users that should be allowed to use gdb to the procmod group.
The recipe is:
restart in recovery mode, open a terminal and run csrutil disable
restart machine and edit /System/Library/LaunchDaemons/com.apple.taskgated.plist
, adding
the -p
opion:
<array>
<string>/usr/libexec/taskgated</string>
<string>-sp</string>
</array>
restart in recovery mode to reenable SIP (csrutil enable
)
restart machine and add user USERNAME
to the group procmod
:
sudo dseditgroup -o edit -a USERNAME -t user procmod
An alternative that does not involve adding users to groups is to make the executable setgid procmod, as that also makes procmod
the effective group id of any user executing the setgid binary (suggested in https://apple.stackexchange.com/a/112132)
sudo chgrp procmod /path/to/gdb
sudo chmod g+s /path/to/gdb
Upvotes: 28
Reputation: 785
Just spent a good few days trying to get this to work on High Sierra 10.13.1. The gdb 8.1 version from homebrew would not work no matter what I tried. Ended up installing gdb 8.0.1 via macports and this miraculously worked (after jumping through all of the other necessary hoops related to codesigning etc).
One additional issue is that in Eclipse you will get extraneous single quotes around all of your program arguments which can be worked around by providing the arguments inside .gdbinit instead.
Upvotes: 1
Reputation: 1833
On my Mac OS X El Capitan, I use homebrew to install gdb:
brew install gdb
Then I follow the instruction here: https://sourceware.org/gdb/wiki/BuildingOnDarwin, in the section 2.1. Method for Mac OS X 10.5 (Leopard) and later.
Upvotes: 10
Reputation: 4546
Install Homebrew first :
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Then run this : brew install gdb
Upvotes: 30
Reputation:
This doesn't necessarily address the question but if you are using Mac OS X then you can probably use lldb
LLDB Homepage . It's very similar to gdb
and even provides a guide to using commands that you would use on gdb
.
Upvotes: 12
Reputation: 748
Once you get the macports version of gdb
installed you will need to disable SIP in order to make the proper edits to /System/Library/LaunchDaemons/com.apple.taskgated.plist
. To disable SIP, you need to restart in recovery mode and execute the following command:
csrutil disable
Then restart. Then you will need to edit the bottom part of com.apple.taskgated.plist
like this:
<array>
<string>/usr/libexec/taskgated</string>
<string>-sp</string>
</array>
Then you will have to restart to have the changes take effect. Then you should reenable SIP. The gdb
command for the macports install is actually ggdb
. You will need to code sign ggdb
following the instructions here:
https://gcc.gnu.org/onlinedocs/gcc-4.8.1/gnat_ugn_unw/Codesigning-the-Debugger.html
The only way I have been able to get the code signing to work is by running ggdb
with sudo
. Good luck!
Upvotes: 2
Reputation: 3603
It seems that MacPorts could be installed in El Capitan right now: https://www.macports.org/install.php Then you probably can install gdb by link you mentioned.
Upvotes: 0