A method of debugging, comprising: receiving by a hardware debug server executing on a computer system , a first high-level language, HLL, debugging command for setting a breakpoint in an HLL software specification; translating by the hardware debug server , the first HLL debugging command into a first hardware debugging command that specifies a condition of a hardware finite state machine that is representation of the software specification; inputting by the hardware debug server , the first hardware debugging command to a simulator executing on the computer system ; adding a conditional breakpoint on the finite state machine by the simulator in response to the first hardware debugging command; executing a simulation of the finite state machine representation; suspending execution of the simulation in response to detecting the condition in the finite state machine; determining , in response to suspending execution of the simulation, a statement of the HLL software specification that corresponds to the condition in the hardware finite state machine; outputting data indicating the statement of the HLL software specification; inputting by the hardware debug server , debugging information associated with the HLL software specification; inputting by the hardware debug server , debugging information that provides a mapping of elements of the HLL software specification to elements of the hardware finite state machine; and cross-referencing the debugging information associated with the HLL software specification with the mapping of the elements of the HLL software specification to the elements of the hardware finite state machine in a database, wherein the translating includes determining from the database an element of the hardware finite state machine, cross-referenced with a HLL statement specified in the first HLL debugging command. receiving by a hardware debug server executing on a computer system , a first high-level language, HLL, debugging command for setting a breakpoint in an HLL software specification; translating by the hardware debug server , the first HLL debugging command into a first hardware debugging command that specifies a condition of a hardware finite state machine that is representation of the software specification; inputting by the hardware debug server , the first hardware debugging command to a simulator executing on the computer system ; adding a conditional breakpoint on the finite state machine by the simulator in response to the first hardware debugging command; executing a simulation of the finite state machine representation; suspending execution of the simulation in response to detecting the condition in the finite state machine; determining , in response to suspending execution of the simulation, a statement of the HLL software specification that corresponds to the condition in the hardware finite state machine; outputting data indicating the statement of the HLL software specification; inputting by the hardware debug server , debugging information associated with the HLL software specification; inputting by the hardware debug server , debugging information that provides a mapping of elements of the HLL software specification to elements of the hardware finite state machine; and cross-referencing the debugging information associated with the HLL software specification with the mapping of the elements of the HLL software specification to the elements of the hardware finite state machine in a database, wherein the translating includes determining from the database an element of the hardware finite state machine, cross-referenced with a HLL statement specified in the first HLL debugging command. <EOS>