I'm under osx 10.8.4 and have installed gdb 7.5.1 with homebrew (motivation get a new gdb with new features such as --with-python etc... )
Long story short when I run debug within a c++ Eclipse project I get :
Error in final launch sequence
Failed to execute MI command:
-exec-run
Error message from debugger back end:
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
I have followed various suggestions for code signing
- https://sourceware.org/gdb/wiki/BuildingOnDarwin
- partly http://www.noktec.be/archives/1251 with various adjusts
So I did:
- Set up the certificate
- Sign the gdb -> codesign -s gdb-cert /usr/local/bin/gdb
When I re-run debugging in Eclipse I get same error as above "(please check gdb is codesigned - see taskgated(8))".
If I set back the gdb to the older gdb (in the gdb preferences of Eclipse) /usr/libexec/gdb/gdb-i386-apple-darwin the debugging runs as expected.
Any solutions / hints out there ?
Thx
Pelle
This may not be related. You can use lldb on macos instead of gdb. You don't need this hassle to install gdb.
lldb(http://lldb.llvm.org) is already installed by default in High Sierra
For anyone who using Sierra 10.12.6 (and above) and Homebrew,
/usr/local/bin/gdb
is a symbolic link to/usr/local/Cellar/gdb/8.0/bin/gdb
(or whatever version, e.g.8.0.1
).You need to codesign both link and target:
Or, if you have
greadlink
(installed viabrew install coreutils
):I experienced the same issue with GDB. I am running under
Mac OS X 10.8.5
aka Mountain Lion. I am using GDB version7.7.1
.I compiled my test program with following command:
If I entered the command
gdb sample.out
, I get the same cryptic error message:This error message however is a red herring.
The solution I found that worked for me was to simply invoke GDB using the superuser acct:
That works fine for me.
And that from that point I could run GDB example.out without using sudo.
Hope this helps and works for others. RSVP if it doesn't.
I made gdb work on OSX 10.9 without codesigning this way (described here):
Install gdb with macports. (may be you can skip it)
change option string from
-s
to-sp
at line 22, col 27.reboot the computer.
Use gdb. If you installed it with mac ports then you must use 'ggdb' command. Or made an alias in your config file:
and use 'gdb' command then.
I wonder if the global change in the highest voted answer here has some unintended consequences.
Rather than enabling the old Tiger convention, taskgated does allow signed code to run. So it might be better to just get a signed cert for gdb, similar to the answer here.
After this I was able to
sudo
use gdb. If you need to use gdb w/o sudo then perhaps this link will help though, disclaimer, I haven't tried it yet because usingsudo
is an ok solution for now`.This error occurs because OSX implements a pid access policy which requires a digital signature for binaries to access other processes pids. To enable gdb access to other processes, we must first code sign the binary. This signature depends on a particular certificate, which the user must create and register with the system.
To create a code signing certificate, open the Keychain Access application. Choose menu Keychain Access -> Certificate Assistant -> Create a Certificate…
Choose a name for the certificate (e.g., gdb-cert), set Identity Type to Self Signed Root, set Certificate Type to Code Signing and select the Let me override defaults. Click several times on Continue until you get to the Specify a Location For The Certificate screen, then set Keychain to System.
Double click on the certificate, open Trust section, and set Code Signing to Always Trust. Exit Keychain Access application.
Restart the taskgated service, and sign the binary.
source http://andresabino.com/2015/04/14/codesign-gdb-on-mac-os-x-yosemite-10-10-2/
On macOS 10.12 (Sierra) and later, you must also
Use gdb 7.12.1 or later Additionally prevent gdb from using a shell to start the program to be debugged. You can use the following command for this inside gdb:
You can also put this last command in a file called .gdbinit in your home directory, in which case it will be applied automatically every time you start gdb
SOURCE: https://sourceware.org/gdb/wiki/BuildingOnDarwin