It can be difficult to identify the offending objects, as you have to catch the deadlock actually happening. If you can, there are a few ways to view the lock activity. Be aware, though, that any way you do it may mean that you may have to sift through mountains of output, especially if your server is busy or heavily loaded (which is probably only when the deadlock occurs :( ), so this may not be for the faint of heart...
You can use EM; select the server, then Management -> Current Activity -> Locks. This will display information about the process, which locks they hold, and the last SQL statement they executed.
You can use the stored procedures sp_who2 and sp_lock. sp_who2 will identify the processes involved in blocking, and sp_lock will tell you why they are blocked.
You can set trace flag 1204 and get very detailed info about the processes involved and what they were doing. See BOL index for 'trace flag 1204' to see how to do this and for other info on identifying deadlock situations.
Jeff Mason
Custom Apps, Inc.
www.custom-apps.com