Pull-down buttons are workable when the user can either perform one action or several variants. The typical example is 'Save', with 'Save as...', 'Export...' and 'Synchronize' as alternate options.
The advantage of pull down buttons is that they're very space-efficient and work well when the default, shown option is the most likely use-case (one good practice is to remember the user's last choice on this menu, and set it as default in future). Unlike menus, users don't expect them docked to specific locations on a page, and they don't force a click-find-click workflow for commonly used actions.
Pull-down buttons also make their content immediately discoverable. A menu named something vague like 'output' might not make much sense, but by making the label one of the actions, like 'Save as...', it becomes clear exactly what sorts of things the controls do.
But pull-downs can be used poorly, too. The options within a pull-down must be variants on one another. I can guess, as a user, that the variant to 'Save' is 'Save as...'. I cannot guess, however, that a variant is 'Rename', 'Delete' or 'Copy'. In that case, the content of the pull-down would be even less discoverable than items in a large menu. Not good.
The other issue is that it must be clear the element can work both as a button and as a menu, and obvious how to operate it as either. Pulldown segments need to be large and visible, and the UI must be able to forgive me for accidentally clicking the button when I meant to open the menu (both through undo functions, and letting me uncommit a click before I release the mouse button). It must also be apparent which buttons are and are not pull-down, and I should be able to click the pulldown as a simple button, or else I will be very frustrated when I click my 'button' and discover I still have to navigate a menu.
Because pulldowns are oftne implemented when screen estate is in short supply, designers create narrow icons that often violate the above cautions. The result is an annoying, frustrating workspace, where the reactions of the UI are always in doubt. Not good for an error-sensitive context like an IDE.